如何在 Laravel 雄辩关系中添加多个条件
Posted
技术标签:
【中文标题】如何在 Laravel 雄辩关系中添加多个条件【英文标题】:How to add multiple conditions on Laravel elequent relationship 【发布时间】:2017-11-01 11:32:44 【问题描述】:我是 Laravel 的新手,正在开发 5.4 版本。我有一个模型“A”和模型“B”。模型 A 与 B 有很多关系。到目前为止一切正常。但现在,我想为这种关系添加更多条件。
默认情况下,Laravel 只处理外键关系。我的意思是它仅根据 1 个条件匹配数据。在这里,我想要更多的条件。
下面是两个模型的表格:
表:一个
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】:您必须限制您的急切加载,使用数组作为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
【讨论】:
你的回答证明,通读文档是件好事…… 这也很有帮助,我已经使用 Laravel 2 年多了。 :) 是的,文档是大多数基本问题的最佳来源。 老兄,我已经知道这个解决方案了。但我想让它通用。假设,我想获取所有 A 记录,那么每个 A 记录应该只有那些属于相应 A id 以及匹配相应年份的 B 记录。 嗯,您可以通过将 where 子句替换为范围来节省一些字符,但没有比这更通用的了。以上是关于如何在 Laravel 雄辩关系中添加多个条件的主要内容,如果未能解决你的问题,请参考以下文章