如何在Laravel elequent关系中添加多个条件

时间:2017-11-01 11:32:45

标签: laravel laravel-5.4

我是Laravel的新手,正在开发5.4版本。我有一个模特" A"和模型" B"。模型A与B.有很多关系。在这里,事情还可以。但现在,我想在这种关系上增加更多条件。

默认情况下,Laravel只能处理外键关系。我的意思是它只根据1个条件匹配数据。在这里,我想要更多条件。

下面是两个模型的表格:

表:A

id      name      Year  
 1      ABC       2016  
 2      DEF       2017  

表:B

 id     A_id     name   Year  
  1       1      tst    2016  
  2       2      fdf    2017  
  3       1      kjg    2017  

默认情况下,如果我想从表B中看到A_id 1的记录,那么Laravel将获取A_id 1的所有记录。但现在,假设,如果我想获取2016年的记录,那么我该如何使用Laravel关系方法?

以下是两个表的Elequent模型:

class A extends Model{  

    public function b(){  
       return this->hasMany('B');  
    }  
}  


class B extends Model{  
     public function a(){  
       return $this->belongsTo('A');  
     }
}  

Code to fetch records of id 1:  

$data = A::with('b')->find(1)->toArray();  

以上请求给出了表B中id 1的所有数据,但我也想提出相应的年份条件。

有谁知道,何我可以这样做?请分享您的解决方案。

由于

1 个答案:

答案 0 :(得分:2)

您必须使用数组作为with()的参数来约束您的预期加载,使用关系名称作为键,并使用闭包作为值:

$data = A::with([
    'b' => function ($query) {
        $query->where('year', '=', '2016');
    },
])->find(1)->toArray();

闭包会自动注入一个查询生成器实例,它允许您过滤您的预先加载的模型。

官方文档中的相应部分:https://laravel.com/docs/5.4/eloquent-relationships#constraining-eager-loads