Laravel обновление или создание данных
у меня есть command
из laravel
который читает файл csv
и вызывает функцию, которая для каждого элемента смотрит, существует ли элемент (обновит его), и если он не существует, он создаст его.
command
это:
public function handle()
{
if (false === file_exists($this->argument('file'))) {
throw new FileNotFoundException('File not found');
}
$this->file = $this->argument('file');
$this->comment('--- Start reading CSV file ---');
$handle = fopen($this->file, "r");
$outPutCsvLine = [];
while ($csvLine = fgetcsv($handle, 1000, ',')) {
$data = [
'name' => $csvLine[0];
'category_id' => $this->searchCategoryByName($csvLine[1])
];
$this->createOrUpdateAliment($data);
}
}
Теперь у меня есть сомнения с функцией, которая создаст этот элемент, на данный момент у меня есть этот код:
private function createOrUpdateAliment($data) {
$aliment = App\Aliment::where('name',$name)->first();
if (null === $aliment) {
$aliment->create($data);
}
else {
.... // actualizar
}
}
я сомневаюсь, как сделать" update
" этого объекта.
Спасибо
1
2 answers
Я рекомендую вам использовать метод Eloquent updateOrCreate
:
public function handle()
{
if (false === file_exists($this->argument('file'))) {
throw new FileNotFoundException('File not found');
}
$this->file = $this->argument('file');
$this->comment('--- Start reading CSV file ---');
$handle = fopen($this->file, "r");
$outPutCsvLine = [];
while ($csvLine = fgetcsv($handle, 1000, ',')) {
$data = [
'name' => $csvLine[0];
'category_id' => $this->searchCategoryByName($csvLine[1])
];
/**
* usando updateOrCreate
* si encuentra un modelo que coincida con 'name': lo actualiza
* de lo contrario lo crea usando lo que pasamos en $data
*/
$updateOrCreate = App\Aliment::updateOrCreate(
['name' => $csvLine[0]],
$data
);
}
}
Link официальная документация: https://laravel.com/docs/5.8/eloquent
2
Author: varTob, 2019-03-21 14:55:07
Основываясь на данных, которые Вы нам показываете, любой из этих двух способов должен обновить запись для вас:
private function createOrUpdateAliment($data) {
$aliment = App\Aliment::where('name',$name)->first();
if (null === $aliment) {
$aliment->create($data);
}
else {
//$aliment->update($data);
//$aliment->category_id = $data['category_id'];
//$aliment->save();
}
}
2
Author: Francisco Garrido, 2019-03-21 12:53:18