Я пытаюсь совместить некоторые методы в «Красноречии», но, похоже, не получается собрать их правильно. У меня есть запрос, который тянет все элементы, где счет hasMany равен 0.Комбинация Laravel имеет() и whereHas()
Так что в основном я хочу знать, где отношения «пусты». В этом случае у меня есть элемент со звуковыми образцами. Итак, я хочу получить предметы, в которых пока нет звуковых образцов.
return $this->hasMany('App\Models\Item')->has('audios', '=', 0);
Это работает полностью нормально. Однако я также хочу добавить фильтр, основанный на мужских и женских образцах аудио. Если я использую whereHas
, я могу получить фильтр, но только напрямую и не могу получить предложение has 0
.
return $this->hasMany('App\Models\Item')->whereHas('audios', function ($q) {
$q->where('gender', 'female');
});
Но нет, я хочу объединить их и не могу понять этот бит. Итак, «получите все предметы без женских аудио-образцов».
Не много документации по этим вопросам, кроме как в тривиальном случае, я пробовал несколько вариантов, но это не подходит. Просто полностью пустые наборы или только самка или мужчина непосредственно без этого «пустого» набора 0.
Вот запрос, я хотел бы получить:
SELECT *
FROM `items`
WHERE (
SELECT COUNT(*)
FROM `audios`
WHERE `audios`.`item_id` = `items`.`id`
AND `audios`.`gender`='female'
) = 0
Не уверен, что если вы предназначенные для того, чтобы получить самок И пустых женщин или пустых женщин $ q-> где («пол», «женщина») -> или где («аудио», «=», «0») или '$ q-> где ('gender ',' female ') -> где (' audios ',' = ', 0); ' –
@Peh' audios' - это имя отношения. поэтому 'item-> hasMany ('audios')'. Мне нужны все предметы, где «нет женских аудио». Я обновил сообщение, чтобы включить прямой запрос, который я ищу. – Rob
не смог проверить его, но вы можете попробовать это? 'Return $ this-> hasMany ('App \ Models \ Item') -> has ('audios' , '=', 0) -> где ('gender', 'female'); ' –