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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与where子句查询的Eloquent嵌套关系在false条件下返回集合相关的知识,希望对你有一定的参考价值。

我正在尝试搜索所有具有RentItem的租金,其书名为LIKE给定的$ input。

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

应该返回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);
}

我做过的研究:

答案

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

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

以上是关于与where子句查询的Eloquent嵌套关系在false条件下返回集合的主要内容,如果未能解决你的问题,请参考以下文章

雄辩地查询与嵌套 WHERE 的关系

有条件地将 where 子句添加到 eloquent 查询

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

查询 eloquent where 子句中的所有值

查询数据库时嵌套 where 子句时遇到问题 - Laravel