如何通过具有最具体的关系来获得Eloquent中的行?

时间:2019-01-07 15:54:50

标签: laravel laravel-5 eloquent laravel-5.1 relationship

我在Laravel 5.1中有一个项目,其中包含三个表:articles,tags和一个用于保存多对多关系的数据透视表:article_tag表。
我需要使所有与标签相关的文章与特定文章相关联,为那些具有大量符合标签的文章分配主要编号或相关性。因此,第一个将是“更相关”的。 例如,如果我需要所有带有tag_id#1和#2的文章,并且如果文章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

但是我想使用口才。我该怎么办?

1 个答案:

答案 0 :(得分:2)

假设原始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(..)