Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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?
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'],
]);
}
}
-
(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
-
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.
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'],
];
}
-
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)
-
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..
-
slano: a otazka je ako natiahnut kontrolu piamo nad ten excel. Nieco som musel prehliadnut pretoze neverim ze to nie je mozne skrz nieco
-
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 ['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)
-
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.