У меня есть 2 модели Tour.php
public function Itinerary() { return $this->hasMany('App\Itinerary', 'tour_id'); }
а также
Itinerary.php
public function tour() { return $this->belongsTo('App\Tour', 'tour_id'); }
туры стол:
id|title|content
таблица маршрутов :
id|tour_id|day|itinerary
Я использовал vue js для создания или добавления и удаления поля ввода для дня и планирования динамически. И использовал следующий код в методе tour.store
для вставки в таблицу itineraries
:
$count = count($request->input('day')); $temp_day = $request->input('day'); $temp_itinerary = $request->input('itinerary'); for($i = 0; $i < $count; ++$i) { $itinerary = new Itinerary; $itinerary->tour_id = $tour->id; $itinerary->plan = $temp_itinerary[$i]; $itinerary->day = $temp_day[$i]; $itinerary->save(); }
И успешно вставлял записи. И применял тот же код в методе tour.store
. Вместо обновления строк он вставлял новые строки в таблицу. Что было бы лучшим решением для этого?
Для обновления попробуйте этот код
$itinerary = Itinerary::find($tour_id); $itinerary->plan = $temp_itinerary[$i]; $itinerary->day = $temp_day[$i]; $itinerary->save();
То, как вы используете, – это вставка / создание новых записей. Для обновления вы можете использовать.
Itinerary::find($tour_id)->update( ['column_name'=> value] );
Где метод find
принимает первичный ключ таблицы.
Это обновит вашу существующую запись. Вы можете обновить столько столбцов, сколько хотите, чтобы передать их в массиве. Вы также можете использовать метод save
как указано в другом ответе.
Проверить Laravel Update Eloquent
РЕДАКТИРОВАТЬ
$iterneary = Itenerary::where('tour_id', $tour_id)->first();
Теперь вы можете обновить этот объект iterneary
до того, что захотите.
вот как я это сделал. Сначала сохранили все туры в $ tours [].
foreach($tours as $tour) { $itinerary->tour()->updateOrCreate(['id'=> $tour['id']],$tour); }
updateOrCreate, потому что вам может потребоваться добавить новые туры во время обновления. Я знаю, что это точно не отвечает на вашу проблему, но это может по крайней мере дать вам представление.