与where子句查询的Eloquent嵌套关系在false条件下返回集合

时间:2018-03-05 14:40:24

标签: php laravel collections nested-queries

我正在尝试搜索所有租金,其租金标题为给定的$ input。

问题是当输入不匹配时,我仍然得到一个集合返回。 唯一的区别是书籍关系是空而不是集合。

应该返回false的查询结果: https://pastebin.com/pd7UqhCi

查询结果为真: https://pastebin.com/shndvdMh

当book等于null时,我不希望返回Rent模型。

我的查询

$rents = Rent::with(['rentItems.book' => function ($query) use ($input) { 
       $query->where('books.title', 'LIKE', "%$input%"); 
}])->get();

租赁模型关系

public function rentItems()
{
  return $this->hasMany(RentItem::class);
}

RentItems模型关系

public function book()
{
     return $this->belongsTo(Book::class);
}

public function rent()
{
     return $this->belongsTo(Rent::class);
}

我做过的研究:

1 个答案:

答案 0 :(得分:3)

您需要使用whereHas()方法。做这样的事情:

$rents = Rent::whereHas('rentItems.book', function ($query) use ($input) { 
    $query->where('books.title', 'LIKE', "%$input%"); 
})->get();