一个简单而直接的问题:
当使用Laravel的hasManyThrough关系时,我该如何附加或分离新记录?从文档here中可以明显看到模型的检索。
编辑:换句话说,是否有一种更聪明的Laravelish方式来执行以下操作(模型名称取自文档)?
$user = $country->users()->first;
$post->user_id = $user->id;
$post->save();
提前感谢。
一个简单而直接的问题:
当使用Laravel的hasManyThrough关系时,我该如何附加或分离新记录?从文档here中可以明显看到模型的检索。
编辑:换句话说,是否有一种更聪明的Laravelish方式来执行以下操作(模型名称取自文档)?
$user = $country->users()->first;
$post->user_id = $user->id;
$post->save();
提前感谢。
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()
$grandparent->grandchildren()->firstOrNew(['parent_id' => $parent_id])->save();
// Or
$grandparent->grandchildren()->updateOrCreate(['parent_id' => $parent_id]);
hasManyThrough()
需要一个已经存在的中介关系。在文档示例中,User
是中介关系。直接将 Post
附加到 Country
上是不可能的,因为它不知道哪个 User
拥有它。你需要先将它附加到 User
上。