У меня есть один 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
"этого объекта.
Спасибо
Я рекомендую тебе использовать mГ©todo updateOrCreate
из Eloquent:
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
);
}
}
Соединение documentaciГіn официальный: https://laravel.com/docs/5.8/eloquent
SegГєn данные, что мы enseГ±as, любая из этих двух форм deberГ, - когда реестр становится отвечающим современным требованиям:
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();
}
}