Вложенные отношения Eloquent с предложением where возвращает коллекцию при ложном условии

Я пытаюсь найти все Арендные платы, у которых есть 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);
}

Исследование, которое я сделал:

3

Решение

Вам нужно использовать whereHas() метод. Сделайте что-то вроде этого:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]