我正在使用构建以以下内容开头的查询的代码:
$products = \App\Product::where('id', '>', 0);
然后继续向$product
添加其他相关模型,具体取决于提供的参数。
我想在第一行代码中添加相关模型。但我显然做错了。
我尝试添加:->get()->designer
来添加“设计者”关系,如下所示:
return json_encode($products = \App\Product::where('id', '>', 0)
->get()->designer);
给出错误:Property [designer] does not exist on this collection instance.
切换订单也不起作用:->designer->get());
(我得到Undefined property
)
我的产品模型的方法有:
public function designer() {
return $this->belongsTo('App\Designer');
}
Product表有一个“designer_id
”列(它是一个“belongsTo”关系,所以我想Designer_id应该在Product模型上)。
文档说:“我们可以像访问模型中的属性一样访问关系方法”:$comments = App\Post::find(1)->comments;
我做错了什么?
答案 0 :(得分:1)
这行代码错了;我猜你的关系是一对多,这意味着一个设计师有很多产品,一个产品属于一个设计师。
与laravel文档[评论和帖子]的例子相比,帖子有很多评论,一条评论属于一个帖子。
当你执行这一行时:
$products = \App\Product::where('id', '>', 0)->get()
belongsTo
的关系。
你的问题的解决方案是使用像这样雄辩的with
助手:
$products = App\Product::with('designer')->where('id', '>', 0)->get();
在laravel社区中,我们将此命名为
渴望加载技术以避免n + 1个请求。
您可以在此处找到更多信息Eager Loading
之后当你想获得设计师attributs时,你可以像这样访问它们:
foreach ($products as $product) {
echo $product->designer->name;
}