Присоединение записей к отношению Laravel hasManyThrough - PullRequest
0 голосов
/ 12 июня 2019

Простой и прямой:

Как я могу присоединить или отсоединить новые записи при использовании Laravel hasManyThrough отношение способ Laravel ? Извлечение модели очевидно из документов здесь .

РЕДАКТИРОВАТЬ : Другими словами, существует ли Laravelish способ сделать следующее умнее (названия моделей взяты из документов)?

$user = $country->users()->first;
$post->user_id = $user->id;
$post->save();

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

hasManyThrough() требует наличия промежуточных отношений.В примере с документами User является промежуточным отношением.Непосредственное присоединение Post к Country невозможно, поскольку он не знает, кому принадлежит User.Вы должны сначала прикрепить его к User.

0 голосов
/ 12 июня 2019

https://laravel.com/api/5.8/Illuminate/Database/Eloquent/Relations/HasManyThrough.html

Да, но вы должны указать все параметры.

firstOrNew 
// (Doesn't persist to DB, you have to manually call the save method later on the created model)
updateOrCreate 
// (Persists to DB)
rawUpdate 
// (Persists to DB, not recommended)

push также должно работать, согласно документам.

В отношении 1: M есть метод save, доступный из коробки.Это потому, что единственное поле, которое Laravel должен заполнить - это внешний ключ.

Например, допустим, у вас есть модели Parent и Child.Когда вы звоните

$parent->children()->save(new Child(...));

Laravel заполняет внешний ключ и сохраняет модель

Если у нас также была модель GrandParent, и мы попытались сохранитьребенок через отношение HasManyThrough:

$grandparent->grandchildren()

Laravel не только должен будет заполнить внешний ключ Parent, но, возможно, даже создать новую модель Parent, поскольку мы не уверены, что она существует.Вот почему не реализован метод save.

Поэтому вы можете сделать что-то вроде

$grandparent->grandchildren()->firstOrNew(['parent_id' => $parent_id])->save();
// Or
$grandparent->grandchildren()->updateOrCreate(['parent_id' => $parent_id]);

Вам также нужен действительный ключ, иначе вы получите нарушение ограничения SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...