Как запросить сообщения, принадлежащие фильтрам, из массива, например: сообщения, принадлежащие фильтру 3 и 5 - PullRequest
2 голосов
/ 03 июля 2019

Я пытаюсь выяснить, как получить сообщения, которые принадлежат некоторым фильтрам, заданным пользователем.Например, пользователь дает несколько фильтров в этом случае с идентификаторами 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

1 Ответ

0 голосов
/ 03 июля 2019
SELECT and
     , qualify
     , only
     , the
     , columns 
     , you
     , actually 
     , want
  FROM posts p
  JOIN assigneds a
    ON a.post_id = p.id
  JOIN filters f
    ON f.id = a.filters_id 
 WHERE a.filters_id IN(3,5)
GROUP
    BY all
     , unaggregated 
     , columns
     , appearing 
     , in
     , the
     , select
     , clause
HAVING COUNT(*) = 2; -- (or COUNT(DISTINCT something))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...