Laravel - 获取相关模型

时间:2018-05-02 16:07:22

标签: laravel-5 eloquent

我正在使用构建以以下内容开头的查询的代码:

$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;

我做错了什么?

1 个答案:

答案 0 :(得分:1)

  1. $ products = \ App \ Product :: where(' id','>',0)          - >得到() - >设计师;
  2. 这行代码错了;我猜你的关系是一对多,这意味着一个设计师有很多产品,一个产品属于一个设计师。

    与laravel文档[评论和帖子]的例子相比,帖子有很多评论,一条评论属于一个帖子。

    当你执行这一行时: $products = \App\Product::where('id', '>', 0)->get()

    laravel将返回给你一系列产品对象,这意味着你无法通过一系列产品获得设计师,因为你在产品模型中有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;
    }