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