一个简单而直接的方法:
当使用Laravel hasManyThrough 关系 Laravel方法时,如何附加或分离新记录? 从文档here中可以很明显地看到模型。
编辑:换句话说,是否存在繁琐的方式来使以下操作更聪明(模型名称取自文档)?
$user = $country->users()->first;
$post->user_id = $user->id;
$post->save();
谢谢。
答案 0 :(得分:0)
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 fills in the foreign key and persists the model
如果我们也有一个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约束。
答案 1 :(得分:0)
hasManyThrough()
需要一个现有的中间关系。在docs示例中,User
是中间关系。无法将Post
直接附加到Country
,因为它不知道哪个User
拥有它。您需要先将其附加到User
。