В Laravel обработка файлов Excel — обычная задача, и часто нам необходимо проверять столбцы импортированного файла Excel, чтобы гарантировать целостность данных. В этой статье блога мы рассмотрим различные методы проверки столбцов в Laravel Excel, а также приведем практические примеры кода. Итак, давайте углубимся и узнаем, как эффективно проверять столбцы Excel в Laravel!
Метод 1: использование встроенных правил проверки Laravel
Один из самых простых способов проверки столбцов Excel — использование встроенных правил проверки Laravel. Вы можете определить правило проверки для каждого столбца и применить его в процессе импорта. Вот пример:
$rules = [
'column1' => 'required',
'column2' => 'numeric',
'column3' => 'email',
];
Excel::import(new MyImport, $path, null, \Maatwebsite\Excel\Excel::XLSX, [
'validationRules' => $rules,
]);
Метод 2: пользовательские правила проверки
Если вам нужны более конкретные правила проверки, вы можете создать собственные правила проверки в Laravel. Это позволяет вам определить сложную логику проверки, адаптированную к требованиям вашего приложения. Вот пример:
Validator::extend('custom_rule', function ($attribute, $value, $parameters, $validator) {
// Custom validation logic here
});
$rules = [
'column1' => 'required|custom_rule',
'column2' => 'numeric',
'column3' => 'email',
];
Excel::import(new MyImport, $path, null, \Maatwebsite\Excel\Excel::XLSX, [
'validationRules' => $rules,
]);
Метод 3: сопоставление и проверка столбцов
Laravel Excel предоставляет удобную функцию под названием «сопоставление столбцов». Он позволяет сопоставлять столбцы файла Excel с конкретными атрибутами вашей модели и соответствующим образом применять правила проверки. Вот пример:
class MyImport implements ToModel, WithMapping, WithValidation
{
public function map($row): array
{
return [
'name' => $row['column1'],
'age' => $row['column2'],
'email' => $row['column3'],
];
}
public function rules(): array
{
return [
'*.column1' => 'required',
'*.column2' => 'numeric',
'*.column3' => 'email',
];
}
}
Excel::import(new MyImport, $path);