Я пытаюсь выяснить, как получить сообщения, которые принадлежат некоторым фильтрам, заданным пользователем.Например, пользователь дает несколько фильтров в этом случае с идентификаторами 3 и 5. Я пробовал красноречивые запросы с оператором where Has
, но ни один из них не работал.Я использую Lumen
, если вам, ребята, нужен табличный вид, пожалуйста, дайте мне знать.
Код, с которым я пытаюсь получить сообщения:
Проблема здесь в том, что он получает всесообщения, имеющие filter_id 3 или 5:
$post = Post::whereHas('filters', function ($q){
$q->whereIn('filters_id',[3,5]);
})->get();
Проблема здесь в том, что он получает все сообщения, которые в таблице назначений для filter_id имеют 3
$post = Post::whereHas('filters', function ($q){
$q->where(['filters_id'=> [3,5]]);
})->get();
Модель сообщения:
class Post extends Model {
public function filters(){
return $this->belongsToMany(Filters::class, 'assigneds','post_id','filters_id');
}
Фильтры Модель:
class Filters extends Model {
public function posts(){
return $this->belongsToMany(Post::class, 'assigneds','post_id','filters_id');
}
Я также пытался написать запрос наподобие этого:
select * from posts where exists (select * from filters inner join assigneds on filters.id=assigneds.filters_id where posts.id= assigneds.post_id and (filters_id=3 and filters_id=5))
Но это не сработало.Так как я пытаюсь получить сообщения, которые принадлежат идентификатору 3 и 5 where In
, не выполнит свою работу, также фильтры 3 и 5 предназначены только для тестирования, я пытаюсь найти правильный способ получения сообщений, принадлежащихкаждый элемент в массиве.
Пример :
array = [3,7,8,10]
Get all the posts that have assigned filter_id 3 and 7 and 8 and 10