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
задан 21.03.2019, 16:54
2 ответа

Я рекомендую тебе использовать 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

2
ответ дан 02.12.2019, 05:18
  • 1
    Эта deberí чтобы быть получающим ответом, используй синтаксис Laravel и он это решает в единственной lí nea. +1 – Shaz 23.03.2019, 14:14

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();
   }
}
2
ответ дан 02.12.2019, 05:18

Теги

Похожие вопросы