我是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的所有数据,但我也想提出相应的年份条件。
有谁知道,何我可以这样做?请分享您的解决方案。
由于
答案 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