gpt4 book ai didi

php - Laravel 查询 - 从相关表中获取对象及其计数

转载 作者:行者123 更新时间:2023-11-29 20:58:33 26 4
gpt4 key购买 nike

我有表格文章及其相关表格commentsviewslikes,其中有一个字段article_id和在我的函数中,我使用 $request['option'] 发送相关表的名称,例如使用 ajax 的评论,以获取评论最多的 5 篇文章。但在我的函数中,我使用 article_idscounts 从查询结果中获取,然后使用 foreach 循环迭代结果并使用 article_id< 获取文章对象 我在查询中发送的。我想避免对第一个查询的每个结果执行该查询。有什么方法可以更优雅地做到这一点,而不需要对数据库进行如此多的调用?

这是我的代码:

public function mostArticle(Request $request) {
$from = $request['from'];
$to = $request['to'];

$result = DB::table($request['option'])
->select(DB::raw('article_id'), DB::raw('count(*) as count'))
->whereDate('created_at', '>=', date($from).' 00:00:00')
->whereDate('created_at', '<=', date($to).' 00:00:00')
->groupBy('article_id')
->orderBy('count', 'DESC')
->take(5)
->get();

foreach($result as $val){
$article = Article::where('id', $val->article_id)->first();
$mostSomethingArticle[$article->id] = [];
$mostSomethingArticle[$article->id]['title'] = $article->title;
$mostSomethingArticle[$article->id]['summary'] = $article->summary;
$mostSomethingArticle[$article->id]['count'] = $val->count;
}

return json_encode($mostSomethingArticle);
}

最佳答案

您可以使用关系或联接。但我不确定这段代码是否正确:

$result = DB::table($request['option'])
->select('article.id', 'article.title', 'article.summary', DB::raw('count('.$request["option"].'.id) as count'))
->join('article', 'article.id', '=', $request['option']."article_id")
->whereDate('created_at', '>=', date($from).' 00:00:00')
->whereDate('created_at', '<=', date($to).' 00:00:00')
->groupBy('article_id')
->orderBy('count', 'DESC')
->take(5)
->get();

return $result;

关于php - Laravel 查询 - 从相关表中获取对象及其计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37423963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com