gpt4 book ai didi

php - 我怎样才能结合这个查询?

转载 作者:行者123 更新时间:2023-11-29 02:42:58 24 4
gpt4 key购买 nike

我正在使用 Laravel Eloquent 访问数据库两次。我将 2 个查询的结果合并为一个。我怎样才能将它变成一个查询,以便它只访问数据库一次?

$openers = Comments::select('id', 'parent_id', 'opener_id', 'topic', 'username', 'comment', 'upvotes', 'created_at', 'updated_at', 'deleted_at')
->where('topic', '=', $topic)
->where('parent_id', '=', 0)
->orderBy('id')
->orderBy('updated_at', 'desc')
->get();

$replies = Comments::select('id', 'parent_id', 'opener_id', 'topic', 'username', 'comment', 'upvotes', 'created_at', 'updated_at', 'deleted_at')
->where('topic', '=', $topic)
->where('parent_id', '!=', 0)
->orderBy('parent_id')
->orderBy('updated_at', 'desc')
->get();

$comments = $openers->merge($replies);

基本上我希望 parent_id: 0 的行按 id 排序,而 parent_id 不为 0 的行按 parent_id 而不是按 id 排序。

最佳答案

删除条件 (parent_id = 0 ,parent_id != 0 ) 并添加条件排序依据以先对所有评论排序,然后再对所有回复排序,另一个条件排序依据以按 id 排序评论并按 parent_id 排序回复

$results = Comments::select(
'id', 'parent_id', 'opener_id', 'topic', 'username', 'comment', 'upvotes', 'created_at', 'updated_at', 'deleted_at',
DB::raw("CASE WHEN parent_id = 0 THEN 'Comments' ELSE 'Replies' END as comment_type")
)
->where('topic', '=', $topic)
->orderByRaw('parent_id = 0 DESC')
->orderByRaw('CASE WHEN parent_id = 0 THEN id ELSE parent_id END ASC')
->orderBy('updated_at', 'desc')
->get();

关于php - 我怎样才能结合这个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47574827/

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