Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-将两个数据透视表中的计数作为一个数字_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php Laravel-将两个数据透视表中的计数作为一个数字

Php Laravel-将两个数据透视表中的计数作为一个数字,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有一个包含articles的表和两个pivot表视图和投票,用于包含列article\u id和user\u id的文章。对于文章,我有一个列publish,在那里我检查文章是否已发布。我需要按受欢迎程度进行查询,从两个数据透视表中获取所有已发表的文章及其计数,其中表中的每个投票将计数为3,表视图中的每个计数将计数为1。我不知道该怎么做,我之前有一个查询,我在那里得到的是发表的文章,它们只有票数,但我只得到了一些有票数的文章,而不是那些发表但没有票数的文章。在新的查询中,我还需要添加视图,更改

我有一个包含
articles
的表和两个pivot表
视图
投票
,用于包含列
article\u id
user\u id
的文章。对于文章,我有一个列
publish
,在那里我检查文章是否已发布。我需要按受欢迎程度进行查询,从两个数据透视表中获取所有已发表的文章及其计数,其中表
中的每个投票将
计数为
3
,表
视图中的每个计数将
计数为
1
。我不知道该怎么做,我之前有一个查询,我在那里得到的是发表的文章,它们只有票数,但我只得到了一些有票数的文章,而不是那些发表但没有票数的文章。在新的查询中,我还需要添加视图,更改计数逻辑,包括已发布的文章和非视图,并根据它们在这两个透视表中的计数对它们进行排序

因此,想要的输出是这样的:

[{"id":117,"popularityCount":17},{"id":118,"popularityCount":15},{"id":121,"popularityCount":13}]
这是一个问题,但这不再是我需要的:

$articles = DB::table('articles')
        ->select([DB::raw('articles.id'), DB::raw('COUNT(*) as "votes"')])
        ->join('votes', 'article_id', '=', 'articles.id')
        ->where('articles.publish', 1)
        ->groupBy('votes.article_id')
        ->orderBy('votes', 'desc')
        ->get();

        return $articles;

如果将来有人需要的话,这就是我最终的工作

$result = Article::select('articles.*', 'v.vote_count', 'vw.view_count')
            ->where('publish', 1)
            ->leftJoin(DB::raw('(SELECT votes.article_id, COUNT(*) AS vote_count FROM votes GROUP BY votes.article_id) v'), 'v.article_id', '=', 'articles.id')
            ->leftJoin(DB::raw('(SELECT views.article_id, COUNT(*) AS view_count FROM views GROUP BY views.article_id) vw'), 'vw.article_id', '=', 'articles.id')
            ->orderByRaw('(v.vote_count * 3) + vw.view_count DESC')
            ->where('created_at', '>', $date->format('Y-m-d') . ' 00:00:00')
            ->get();

如果将来有人需要的话,这就是我最终的工作

$result = Article::select('articles.*', 'v.vote_count', 'vw.view_count')
            ->where('publish', 1)
            ->leftJoin(DB::raw('(SELECT votes.article_id, COUNT(*) AS vote_count FROM votes GROUP BY votes.article_id) v'), 'v.article_id', '=', 'articles.id')
            ->leftJoin(DB::raw('(SELECT views.article_id, COUNT(*) AS view_count FROM views GROUP BY views.article_id) vw'), 'vw.article_id', '=', 'articles.id')
            ->orderByRaw('(v.vote_count * 3) + vw.view_count DESC')
            ->where('created_at', '>', $date->format('Y-m-d') . ' 00:00:00')
            ->get();