У меня есть файл csv с данными внутри. Я хочу импортировать его в свою базу данных. Если в файле csv есть повторяющиеся данные, я не хочу, чтобы он создавал новые повторяющиеся записи, я хочу его обновить.
Но проблема в том, что создаются новые повторяющиеся записи.
Контроллер (сокращенно):
Excel::import(new FruitImport, $request->file('fruits_file'), \Maatwebsite\Excel\Excel::XLSX);
Файл импорта (сокращенно):
class FruitImport implements ToModel, WithUpserts, ... {
public function model(array $row) {
return new Fruit([
'color' => $row[0],
'taste' => $row[1],
'smell' => $row[2],
'name' => $row[3],
'price' => $row[4],
'supplier_id' => $row[5],
...
]);
}
public function uniqueBy() {
return ['color', 'taste', 'smell', 'name'];
}
...
}
Итак, в основном, если я импортирую файл csv, содержащий строки с одинаковым цветом, вкусом, запахом и именем, в свою базу данных, я хочу, чтобы он был обновлен. То же самое, если какая-либо запись в моей базе данных имеет одинаковые данные о цвете, вкусе, запахе и названии.
Моя таблица:
Field | Type | Key | ...
id | big int un..| Pri |
color | varchar(12) | |
taste | varchar(12) | |
smell | varchar(12) | |
name | char(20) | |
...
Я использую Laravel 8, Php 8.0.2 и Mysql 8. Laravel excel - это версия 3.1.
Мои ссылки:
https://laravel.com/docs/8.x/eloquent#upserts
https://docs.laravel-excel.com/3.1/imports/model.html#upserting-models
Любые идеи?