Я просмотрел много ответов на этот вопрос, и мой код работает, но он не дает ожидаемых результатов.
У меня есть таблица местоположений и таблица списков.Многие списки могут принадлежать одному местоположению.
То, что я хотел бы сделать, это получить определенное местоположение, и в результате должны быть включены все связанные списки, за исключением того, которое просматривает пользователь.Я передаю $listing_id
для подзапроса для этого, но проблема в том, что $location_other_listings
все еще включает этот список (в приведенном ниже примере с $listing_id = 3
).
$listing_id = 3;
$location_other_listings = Location::whereHas('listings', function ($query) use($listing_id) {
$query->where('id', '!=', $listing_id);
})
->where('id', $location_id)
->first();
Обновление:
Я также попробовал обратное (whereDoesntHave
и =
вместо !=
):
$listing_id = 3;
$location_other_listings = Location::whereDoesntHave('listings', function ($query) use($listing_id) {
$query->where('id', '=', $listing_id);
})
->where('id', $location_id)
->first();
Но это приводит к NULL для всех моих различных списков.Не уверен, почему.
Как указано, первый запрос работает.Так что я могу сделать следующее: когда $location_other_listings
пусто, я знаю, что нет других связанных списков.Если он не пустой, я могу удалить список с текущим listing_id
из результирующего массива.Это дало бы желаемый результат, однако мне было интересно, смогу ли я получить этот результат одним запросом.