如何根据关系内容过滤模型的结果

时间:2015-09-16 09:36:05

标签: php laravel laravel-4

我有两个模型,它们之间有一对多的关系: 预订属于一家公司。公司可以有多个预订。

我知道想查询公司有特定参数集的所有预订。所以我尝试了这个查询,但它只能部分工作。它会丢弃被排除的公司信息,但它不会从结果集中删除保留。

$result = Reservations::with(['company' => function($query) {
   $query->where('kind_of','=','r');
 }])->get();

它仍然返回不符合with语句中where子句的保留。只有额外的预先加载的数据不再被加载。

如何排除与sql-clause匹配的保留:

... WHERE company.kind_of = 'r'

2 个答案:

答案 0 :(得分:0)

这对你有用吗?

$result = Company::with('reservations')->where('kind_of','=','r')->get();

答案 1 :(得分:0)

您需要使用whereHas方法根据关系的存在来执行查询,然后您需要记住使用with急切加载公司本身。

$result = Reservations::whereHas('company', function($query) {
   $query->where('kind_of','r');
 })->with('company')->get();