Как сохранить запись в базе данных, используя многие отношения в laravel

У меня есть три стола: restaurant_location, cuisine_restaurant_location и кухни.

В моей таблице кухонь есть список всех кухонь. У меня есть все подробности о ресторане в моей таблице restaurant_location. В ресторане может быть много кухонь, поэтому я сделал таблицу kitchen_restaurant_location, в которой есть два столбца kitchen_id и restaurant_id. Я создал отношение "принадлежит многим" в моей модели restaurant_location.

модель расположения-ресторана

public function cuisines()
{
    return $this->belongsToMany(Cuisine::class, 'cuisine_restaurant_location', 'restaurant_id', 'cuisine_id');
}

У меня есть форма, в которой предполагается добавить все детали ресторана вместе с кухнями. Прямо сейчас я добавляю все детали ресторана. Теперь вопрос, как мне вставить кухни в "kitchen_restaurant_location".

Контроллер

$rest = new restaurant_location;
$rest->name = $request->input('name');
$rest->description = $request->input('desc');
$rest->save();
$cuisine = new cuisine_restaurant_location
$cuisine_lists = $request->input('cuisines');
foreach ($cuisine_lists as $cuisine_list) {
    $cuisine->name = $cuisine_list;
}

person Haris Khan    schedule 04.04.2019    source источник
comment
Возможно дубликат: stackoverflow.com / questions / 24702640 /   -  person Sergey Bogdanov    schedule 04.04.2019


Ответы (2)


Вы можете использовать методы sync и attach, , описанные в разделе "Многие ко многим" красноречивой документации, для этого:

$rest->cuisines()->attach([$cuisineIds])

Где cuisineIds - это список идентификаторов кухонь, с которыми вы хотите общаться. Разница между sync и attach в том, что sync удалит все идентификаторы, отсутствующие в массиве идентификаторов, которые вы передаете.

person namelivia    schedule 04.04.2019
comment
У меня есть список идентификаторов кухонь, которые я хочу вставить вместе с идентификатором ресторана. Я использую $ rest- ›cuisines () -› attach (['kitchen_id' = ›$ kitchen_ids]); которые приводят к ошибкам (cuisine_id, location_id, 0, 1) значениям (kitchen_id, 30, 1, 2)). ) столбец не найден. подскажите, как это исправить ?? - person Haris Khan; 04.04.2019
comment
Вы должны напрямую вставлять идентификаторы как простой массив, а не как массив значений ключа, например: $cuisineIds = [1,2,3] - person namelivia; 04.04.2019
comment
он все еще добавляет столбец 0. Столбец не найден: 1054 Неизвестный столбец «0» в «списке полей» (SQL: вставить в значения cuisine_restaurant_location (cuisine_id, restaurant_id, 0) (0, 31, 1)). - person Haris Khan; 04.04.2019
comment
Можете ли вы выгрузить свой массив $cuisine_ids перед прикреплением и опубликовать результат здесь? Если вы просто хотите прикрепить кухню с идентификаторами 1 и 2, массив должен иметь вид [1, 2] - person namelivia; 04.04.2019

Попробуйте метод sync ():

$h = [];
if (isset($input["cuisine_id"])) {
    $h = $input["cuisine_id"];
}
$restaurant_location->cuisines()->sync($h);
person Manisha    schedule 04.04.2019