Laravel 如何通过拥有最具体的关系来获得雄辩有序的行?

Laravel 如何通过拥有最具体的关系来获得雄辩有序的行?,laravel,laravel-5,eloquent,laravel-5.1,relationship,Laravel,Laravel 5,Eloquent,Laravel 5.1,Relationship,我在Laravel 5.1中有一个项目,其中有三个表:articles、tags和一个pivot表,用于保存多对多关系:article\u tag table。 我需要将所有与标签相关的文章放到一篇特定的文章中,为那些与标签相关的文章分配一个主要编号或相关性。因此,首先是那些“更相关的”。 例如,如果我要求所有文章都具有标记#id#1和#2,并且如果文章A有两个标记,但文章B只有一个重合点,那么我希望两篇文章都按顺序排序:A,B 我想我可以用mysql语句来实现: SELECT articles

我在Laravel 5.1中有一个项目,其中有三个表:articles、tags和一个pivot表,用于保存多对多关系:article\u tag table。
我需要将所有与标签相关的文章放到一篇特定的文章中,为那些与标签相关的文章分配一个主要编号或相关性。因此,首先是那些“更相关的”。 例如,如果我要求所有文章都具有标记#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

但我想用雄辩的语言。如何处理它?

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

您需要
使用DB在将使用此代码的模型/控制器中,或者您可以改为执行
\DB::raw(..)

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

您需要
使用DB在将使用此代码的模型/控制器中,或者您可以改为执行
\DB::raw(…)

这不是一个直接的答案,因为它不是一种雄辩的方法,但您可以通过查询生成器运行raw SQL@谢谢,但这不是我想要的。这就是我现在所拥有的,我不想改变一个直接的答案,因为这不是一个雄辩的方法,但您可以通过查询生成器运行原始SQL@谢谢,但这不是我想要的。这就是我现在拥有的,我想改变