如何从数组ex中查询属于过滤器的帖子:属于过滤器3和5的帖子

时间:2019-07-03 08:59:25

标签: php mysql database laravel eloquent

我试图弄清楚如何获得属于用户提供的某些过滤器的帖子。例如,在这种情况下,用户提供了一些ID为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))

但是没有用。由于我试图获取属于ID 3和5 where In的帖子,因此无法完成工作,并且ID 3和5过滤器也仅用于测试,因此我试图找到一种适当的方法来获取ID为3和5的帖子。属于数组中的每个元素。

示例

array = [3,7,8,10]
Get all the posts that have assigned filter_id 3 and 7 and 8 and 10

2 个答案:

答案 0 :(得分:0)

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))

答案 1 :(得分:0)

好吧,所以这个对我来说很好,尽管现在花费的时间比我现在想要的更多,但是我不能做得更好,如果将来我回到这个项目并做出更改,我将在此回复中发表评论

$temp = $request->filter_id;    
$post = Post::whereDoesntHave('filters', function ($q) use ($temp){
    foreach($temp as $filter){
        $q->where('filters_id', '!=' , $filter);
    }
})->get();