Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Wangarad 16. 01. 2023, 23:25:34

Název: Laravel Import CSV/Excel a validacia
Přispěvatel: Wangarad 16. 01. 2023, 23:25:34
Zdravicko skusam export/import s a do Laravelu.
V podstate to funguje ale neviem celkom dobre uchopit validaciu dat.
A sice ak som to spravne pochopil podla https://docs.laravel-excel.com/3.1/imports/validation.html#custom-validation-attributes (https://docs.laravel-excel.com/3.1/imports/validation.html#custom-validation-attributes) pisu o kontrole riadku ale ako validovat cely dokument na import? Ak napriklad chcem v prvom slpci len datum v druhom len cislo atd by som asi vedel ale ako validovat to aby vzdy dlzku len 10 udajov? TEda 10 riadkov?

Kód: [Vybrat]
class CsvImport implements ToModel, WithHeadingRow
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
public function rules(): array
{
    return [
        '1' => 'integer:day_position'
    ];

}
    public function model(array $row)
    {
        return new Csv([
            'planed_day'     => $row['planed_day'],
            'device_id'    => $row['device_id'],
            'day_position'    => $row['day_position'],
            'value'    => $row['value'],
         
        ]);
    }
}
Název: Re:Laravel Import CSV/Excel a validacia
Přispěvatel: snugar_i 17. 01. 2023, 06:47:59
(Disclaimer: Laravel neznám, takže tohle je pouze výsledek googlení)
Podle https://stackoverflow.com/a/69927977 to vypadá, že by mělo stačit naimplementovat Maatwebsite\Excel\Concerns\WithLimit
Název: Re:Laravel Import CSV/Excel a validacia
Přispěvatel: Wangarad 24. 01. 2023, 07:52:38
snugar_i :
V podstate to pomohlo ale stale to nie je "smart ako potrebujem". Ako by sa tam dala do implementovať kontrola obsahu csv ci uz existuje v databaze? Lebo chapem ze ochrana skrz  rules() ale nechapem ako validovat napriklad planed_day ci uz existuje v db resp. ci uz existuje pozicia pre ten planovany den.

Kód: [Vybrat]
  public function rules(): array
    {
        return [
            'planed_day' => ['required', 'string', 'min:2', 'max:60'],
            'device_id' => ['required','numeric','gt:0'],
            'day_position' => ['required','numeric'],
            'value' => ['required','numeric','min:0', 'max:1000'],
            'device_parameter' => ['required','string','min:2', 'max:60'],
           
        ];
    }
Název: Re:Laravel Import CSV/Excel a validacia
Přispěvatel: slano 24. 01. 2023, 13:07:16
Kontrola toho ci uz objekt je alebo nie je v databaze umozni pravidlo exists https://laravel.com/docs/9.x/validation#rule-exists (https://laravel.com/docs/9.x/validation#rule-exists)

V priprade potreby komlpexnejsej validacnej logiky je mozne vytvorit si pravidlo vlastne: https://laravel.com/docs/9.x/validation#custom-validation-rules (https://laravel.com/docs/9.x/validation#custom-validation-rules)
Název: Re:Laravel Import CSV/Excel a validacia
Přispěvatel: slano 24. 01. 2023, 14:06:10
Kontrola toho ci uz objekt je alebo nie je v databaze umozni pravidlo exists https://laravel.com/docs/9.x/validation#rule-exists (https://laravel.com/docs/9.x/validation#rule-exists)

V priprade potreby komlpexnejsej validacnej logiky je mozne vytvorit si pravidlo vlastne: https://laravel.com/docs/9.x/validation#custom-validation-rules (https://laravel.com/docs/9.x/validation#custom-validation-rules)

ach, zle som si vsimol, ze tie validacne pravidla v poste su pravidla priamo pre laravel-excel..
Název: Re:Laravel Import CSV/Excel a validacia
Přispěvatel: Wangarad 24. 01. 2023, 14:16:20
slano:  a otazka je ako natiahnut kontrolu piamo nad ten excel. Nieco som musel prehliadnut pretoze neverim ze to nie je mozne skrz nieco
Název: Re:Laravel Import CSV/Excel a validacia
Přispěvatel: snugar_i 24. 01. 2023, 15:23:52
snugar_i :
V podstate to pomohlo ale stale to nie je "smart ako potrebujem". Ako by sa tam dala do implementovať kontrola obsahu csv ci uz existuje v databaze? Lebo chapem ze ochrana skrz  rules() ale nechapem ako validovat napriklad planed_day ci uz existuje v db resp. ci uz existuje pozicia pre ten planovany den.
Možná to je tohle? https://docs.laravel-excel.com/3.1/imports/model.html#upserting-models
Že bys vrátil
Kód: [Vybrat]
['planed_day', 'day_position']
Jinak mi celá ta Laravel importační knihovna přijde nešťastně navržená - snažili se to udělat tak, aby framework volal uživatelský kód, ale zrovna tady by to asi bylo stokrát jednodušší naopak (kdyby uživatel prostě dostal něco, co mu vrací řádky, a sám by si je převáděl a ukládal)
Název: Re:Laravel Import CSV/Excel a validacia
Přispěvatel: slano 25. 01. 2023, 12:26:48
slano:  a otazka je ako natiahnut kontrolu piamo nad ten excel. Nieco som musel prehliadnut pretoze neverim ze to nie je mozne skrz nieco

Este raz som pozrel tu dokumentaciu k laravel-excel, rules() metoda akceptuje validacne pravidla frameworku, cize by to malo bez problemov fungovat.

The rules() method, expects an array with Laravel Validation rules to be returned.