[英]Query HasManyThrough Laravel relation retrieving related records
[英]Attaching records to a Laravel hasManyThrough relation
一个简单直接的:
以 Laravel 方式使用 Laravel hasManyThrough关系时,如何附加或分离新记录? 模型检索很明显,来自这里的文档。
编辑:换句话说,是否有一种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()
Laravel 不仅需要填写 Parent 外键,甚至可能还要创建一个新的 Parent 模型,因为我们不确定它是否存在。 这就是为什么没有实现save
方法的原因。
因此,您可以制作类似的东西
$grandparent->grandchildren()->firstOrNew(['parent_id' => $parent_id])->save();
// Or
$grandparent->grandchildren()->updateOrCreate(['parent_id' => $parent_id]);
您也需要一个有效的密钥,否则您将违反 SQL 约束。
hasManyThrough()
需要一个现有的中间关系。 在文档示例中, User
是中间关系。 无法将Post
直接附加到Country
,因为它不知道哪个User
拥有它。 您需要先将其附加到User
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.