Php Laravel get Post在每个标签类别上至少有一个标签
我想列出所有帖子,在我选择的每个类别上至少有一个标签。 在我们的laravel应用程序中,我们有一个Post和Tag模型 在Post模型中,我们有:Php Laravel get Post在每个标签类别上至少有一个标签,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我想列出所有帖子,在我选择的每个类别上至少有一个标签。 在我们的laravel应用程序中,我们有一个Post和Tag模型 在Post模型中,我们有: public函数标签() { 返回$this->belongtomany(标记::class,'post_标记','post_id','Tag_id'); } 选择至少有一个{3,2}标记和至少一个{8,10}标记的post的查询是什么 我写这段代码: $tags=['news'=>[3,2],'alert'=>[8,10]; Post::whe
public函数标签()
{
返回$this->belongtomany(标记::class,'post_标记','post_id','Tag_id');
}
选择至少有一个{3,2}标记和至少一个{8,10}标记的post的查询是什么
我写这段代码:
$tags=['news'=>[3,2],'alert'=>[8,10];
Post::whereHas('tags',函数($query)use($tags){
foreach($category=>$tag的标记){
$query->where('tags.id',$tag);
}
}
职位
标签
邮政标签
+-----------+---------+
| post_is | tag_id |
+-----------+---------+
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
| 1 | 8 |
| 1 | 9 |
| 1 | 10 |
| 9 | 9 |
| 9 | 6 |
| 3 | 7 |
| 7 | 1 |
| 7 | 2 |
| 7 | 8 |
+-----------+---------+
但结果一文不值
我需要的结果后雄辩和查询性能是重要的
larave版本是5.8.35我将从一个原始的MySQL查询开始,该查询完成了任务。然后,围绕它构建您的Laravel脚本
SELECT
p.id,
p.title
FROM posts p
INNER JOIN post_tags pt
ON pt.post_id = p.id
GROUP BY
p.id,
p.title
HAVING
SUM(pt.tag_id IN (2, 3)) > 0 AND
SUM(pt.tag_id IN (8, 10)) > 0;
您的Laravel代码:
$posts = DB::table('posts p')
->join('post_tags pt', 'pt.post_id', '=', 'p.id')
->groupBy('p.id', 'p.name')
->havingRaw('SUM(pt.tag_id IN (2, 3)) > 0 AND SUM(pt.tag_id IN (8, 10)) > 0')
->select('p.id', 'p.name')
->get();
我将从一个原始的MySQL查询开始,该查询完成了任务。然后,围绕它构建您的Laravel脚本
SELECT
p.id,
p.title
FROM posts p
INNER JOIN post_tags pt
ON pt.post_id = p.id
GROUP BY
p.id,
p.title
HAVING
SUM(pt.tag_id IN (2, 3)) > 0 AND
SUM(pt.tag_id IN (8, 10)) > 0;
您的Laravel代码:
$posts = DB::table('posts p')
->join('post_tags pt', 'pt.post_id', '=', 'p.id')
->groupBy('p.id', 'p.name')
->havingRaw('SUM(pt.tag_id IN (2, 3)) > 0 AND SUM(pt.tag_id IN (8, 10)) > 0')
->select('p.id', 'p.name')
->get();
你的代码看起来不错。你能检查生成的原始查询吗?你在查询中写过get()吗?你的代码看起来不错。你能检查生成的原始查询吗?你写过get()吗在查询中?非常感谢,但是没有工作,因为
与sql\u mode=only\u full\u group\u by
不兼容,这里有些不对劲,因为我的查询应该与only\u full\u group\u by
模式兼容。你确定你正在运行我的代码,完全没有修改吗?不,你的代码不工作,所以我只应用了一些c您的代码错误是:SQLSTATE[42S02]:找不到基本表或视图:1146表“temp.posts p”不存在…
@tim biegeleisenI不知道您确切的表名,我只知道您在问题中共享的信息。根据这些信息,我的答案是有效的。我的表名与您的代码完全相同,但我不知道问题出在哪里。非常感谢您,但这不是工作由于与sql\u mode=only\u full\u group\u by
不兼容而导致查询出错,因为我的查询应该与only\u full\u group\u by
模式兼容。您确定您正在运行我的代码,完全没有修改吗?不,您的代码不起作用,所以我只是对其进行了一些更改。您的代码错误是:SQLSTATE[42S02]:找不到基表或视图:1146表“temp.posts p”不存在…
@tim biegeleisenI不知道您的确切表名,我只知道您在问题中共享的信息。根据这些信息,我的答案是有效的。我的表名与您的代码完全相同,但我不知道问题出在哪里。