Я пытаюсь найти все Арендные платы, у которых есть RentItem с названием книги, LIKE с заданным значением $ input.
Проблема в том, что когда ввод не совпадает, я все равно получаю возвращенную коллекцию.
Единственное отличие состоит в том, что отношение книги является нулевым, а не коллекцией.
Результат запроса, который должен вернуть false:
https://pastebin.com/pd7UqhCi
Результат запроса, который является истинным:
https://pastebin.com/shndvdMh
Когда книга равна нулю, я не хочу, чтобы модель Rent возвращалась.
Мой запрос
$rents = Rent::with(['rentItems.book' => function ($query) use ($input) {
$query->where('books.title', 'LIKE', "%$input%");
}])->get();
Аренда модели Relation
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();
Других решений пока нет …