Laravel Excel — мощная библиотека, упрощающая работу с электронными таблицами Excel в приложениях Laravel. Несмотря на то, что он превосходен (каламбур) при импорте и экспорте данных, одна из распространенных задач, с которыми часто сталкиваются разработчики, — это обновление существующих данных в файле Excel вместо простого добавления новых записей. В этой статье мы рассмотрим несколько способов добиться этого, используя разговорный язык и практические примеры кода.
Метод 1: использование метода updateExistingBy
Один из подходов — использовать метод updateExistingBy, предоставляемый Laravel Excel. Этот метод позволяет вам указать уникальный идентификатор для записей в вашем файле Excel и обновить соответствующие записи в вашей базе данных. Давайте рассмотрим пример:
Excel::import(new YourImportClass, 'your-file.xlsx', null, \Maatwebsite\Excel\Excel::XLSX);
class YourImportClass implements \Maatwebsite\Excel\Concerns\ToModel, \Maatwebsite\Excel\Concerns\WithUpserts
{
use \Maatwebsite\Excel\Concerns\WithBatchInserts;
public function uniqueBy()
{
return 'id';
}
public function updateExistingBy()
{
return 'id';
}
public function model(array $row)
{
// Process and return your model here
}
}
В этом примере мы указываем методы uniqueByи updateExistingByв классе импорта. Метод uniqueByопределяет столбец, содержащий уникальный идентификатор для каждой записи, а метод updateExistingByопределяет столбец, используемый для сопоставления и обновления существующих записей.
Метод 2: использование метода getCollection
Другой метод предполагает использование метода getCollectionдля извлечения данных из файла Excel в виде коллекции Laravel. Затем вы можете перебирать коллекцию, находить и обновлять нужные записи. Вот пример:
$rows = Excel::toCollection(new YourImportClass, 'your-file.xlsx', null, \Maatwebsite\Excel\Excel::XLSX)
->first();
foreach ($rows as $row) {
$model = YourModel::where('id', $row['id'])->first();
if ($model) {
// Update the model attributes here
$model->name = $row['name'];
$model->email = $row['email'];
// ...
$model->save();
}
}
В этом методе мы извлекаем данные из файла Excel с помощью метода toCollectionи извлекаем данные первого листа. Затем мы перебираем каждую строку, находим соответствующую модель в базе данных, обновляем нужные атрибуты и сохраняем изменения.
Метод 3: использование метода «updateOrCreate» Eloquent
Если вы предпочитаете более краткий подход, вы можете использовать метод updateOrCreateEloquent для обновления существующих записей или создания новых, если они не существуют.. Вот пример:
$rows = Excel::toCollection(new YourImportClass, 'your-file.xlsx', null, \Maatwebsite\Excel\Excel::XLSX)
->first();
foreach ($rows as $row) {
YourModel::updateOrCreate(['id' => $row['id']], [
'name' => $row['name'],
'email' => $row['email'],
// ...
]);
}
В этом методе мы используем метод updateOrCreateнепосредственно в модели, передавая столбец уникального идентификатора и массив атрибутов для обновления.
Обновление существующих данных в Laravel Excel не должно быть сложной задачей. В этой статье мы рассмотрели три различных метода для достижения этой цели, в том числе использование метода updateExistingBy, метода getCollection и метода updateOrCreate Eloquent. Используя эти методы, вы можете эффективно обновлять существующие данные в файлах Excel и поддерживать актуальность данных вашего приложения.