如何根据关系的内容筛选模型的结果


How to filter results of model based on contents of relationship

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

我知道我想查询公司设置了某个参数的所有预订。所以我尝试了这个查询,但它只部分工作。它将丢弃排除在外的company-info,但不会从结果集中丢弃预订。

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

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

我如何能够排除匹配sql-clause的保留:

... WHERE company.kind_of = 'r'

您需要使用whereHas方法来执行基于关系存在的查询,并且您还需要记住使用with来急切加载公司本身。

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

这对你有用吗?

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