我在Laravel5.1中有一个项目,它有三个表:文章、标签和一个枢轴表来保存多到多的关系: article_tag表。
我需要得到所有的文章相关的标签到一个特定的文章,分配一个主要的数字或相关的文章,有大量的巧合通过标签。因此,首先是那些“更相关的”。例如,如果我需要所有带有tag_id #1和#2的文章,如果A条有两个标记,但是B条只有一个巧合,我希望这两篇文章都按顺序排列: A,B。
我想我可以用mysql语句来做这件事:
SELECT articles.*, count(*) as tags_count
FROM article_tag, articles
WHERE tag_id in (1,2)
AND articles.id = article_tag.article_id
GROUP BY article_id
ORDER BY tags_count DESC但我想用雄辩。我怎么才能接近它?
发布于 2019-01-07 15:59:33
假设原始sql查询是您需要的查询,这样的查询应该可以工作:
$articles = Article::select(DB::raw('articles.*'), DB::raw('count(*) as tags_count'))
->join('article_tag', 'article_tag.article_id', '=', 'articles.id')
->whereIn('tag_id', [1, 2])
->groupBy('article_id')
->orderBy('tags_count', 'desc')
->get();您需要在使用此代码的模型/控制器中使用use DB;,或者可以使用\DB::raw(..)。
https://stackoverflow.com/questions/54077635
复制相似问题