Laravel Eloquent Query множественные ГДЕ В / НЕ В

У меня есть следующий код, который возвращает все файлы, связанные с тегом из массива $ includes, который работает нормально.

FileObject::whereHas('tags', function($q) use ($included){
$q->WhereIn('name', $included);
})->get())

Теперь я хочу исключить некоторые теги, поэтому я попробовал этот код ниже, который, кажется, не работает.

FileObject::whereHas('tags', function($q) use ($included,$excluded){
$q->WhereIn('name', $included)
->WhereNotIn('name', $excluded);
})->get())

Как мне создать этот запрос?

Благодарю.

Редактировать 1

Возвращенная подготовленная строка SQL выглядит следующим образом

select * from `fileobjects`
where exists (
select * from `tags`
inner join `taggables` on `tags`.`id` = `taggables`.`tag_id`
where `taggables`.`taggable_id` = `fileobjects`.`id`
and `taggables`.`taggable_type` = ?
and `name` in (?) and `name` not in (?)
)

Но мне нужно это

select * from `fileobjects`
where
(
exists (
select * from `tags`
inner join `taggables` on `tags`.`id` = `taggables`.`tag_id`
where `taggables`.`taggable_id` = `fileobjects`.`id`
and `taggables`.`taggable_type` = "App\\FileObject"and `name` in (?)
)
)
and
(
not exists (
select * from `tags`
inner join `taggables` on `tags`.`id` = `taggables`.`tag_id`
where `taggables`.`taggable_id` = `fileobjects`.`id`
and `taggables`.`taggable_type` = "App\\FileObject"and `name` in (?)
)
)

решаемая
Ну, в моем случае это работает как ожидалось

$files = FileObject::whereHas('tags', function($q) use ($included){
$q->whereIn('name', $included);
})->whereDoesntHave('tags', function($q) use ($excluded){
$q->whereIn('name', $excluded);
})->get();

0

Решение

Задача ещё не решена.

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector