Создайте и свяжите с Eloquent в Laravel

Могу ли я создать и связать связанную модель в режиме реального времени? Например

Пусть это будет таблица countries с идентификаторами и названиями. Например 171 | Poland.

Таблица addresses имеет столбец country_id в качестве внешнего ключа, но не нулевой и такие столбцы как город, улица и другие.

В AdressModel также установлено свойство $fillable.

И теперь, чтобы создать новый адрес из запроса, я знаю три способа сделать это.

  1. Добавьте 'country_id' в свойство $fillable AddresseModel, а затем Country::create($request-›address);
  2. Используйте new Address(), а затем назначьте поля соответствующим свойствам объекта. Наконец save();
  3. Разрешите 'country_id' быть nullable, сделайте Country::create($request->address) и вызовите Associate() для данного метода отношения, в этом случае - country().

Есть ли способ сделать это встроенным без nullable(), например:

$country = Country::find($request->country_id);
$address = Address::create($request->address)->country()->associate($country)

person Bejkrools    schedule 21.05.2021    source источник


Ответы (1)


Вы можете сделать что-то вроде этого:

$country = Country::find($request->country_id);
$address = $country->addresses()->create([
    'city' => 'Barcelona',
    ...
]);
person Professor    schedule 21.05.2021
comment
Спасибо! Ты прав! Но что, если у меня есть модель с двумя отношениями, например, UserModel имеет address_id и company_id, оба внешних ключа не допускают значение null и связанные модели создаются с помощью UserModel< /i> сразу? Может быть, это слишком много для Eloquent? - person Bejkrools; 21.05.2021
comment
На самом деле, я никогда не сталкивался с таким сценарием, поэтому я действительно не знаю, справится ли с этим Eloquent. Я думаю, что здесь я бы выбрал другой подход: я бы сначала создал компанию и адрес, а затем создал пользователя (точно так же, как метод 1 в вашем примере). - person Professor; 22.05.2021