求助:分组后最新一条数据

public function index(Request $request)
{
    $category_id = $request->get(‘category_id’, 1);
    $old_user_order = $request->get(‘old_user_order’, 0);
    $old_user_name = $request->get(‘old_user_name’, ‘’);
    $start_time = $request->get(‘start_time’, ‘’);
    $end_time = $request->get(‘end_time’, ‘’);
    $scale_result = $request->get(‘scale_result’, ‘’);

    $query = scaleOldUserResult::query();

    $query->select(['id', 'old_user_id', 'scale_id', 'reasons_id', 'admin_user_id', 'final_result', 'created_at']);
    $query->with([
        'old_user:id,name,order,status',
        'scale:id,name,category_id',
        'admin_user:id,name',
        'reasons'
    ]);
    $query->whereHas('old_user', function ($query) use ($old_user_order, $old_user_name) {
        if ($old_user_order > 0) {
            $query->where('order', 'LIKE', '%' . $old_user_order . '%');
        }
        if($old_user_name){
            $query->where('name', 'LIKE', '%' . $old_user_name . '%');
        }
    });

    $query->whereHas('scale', function ($query) use ($category_id) {
        $query->where('category_id', $category_id);
    });

    if ($start_time && $end_time) {
        $query->whereBetween('created_at', [$start_time . ' 00:00:00', $end_time . ' 23:59:59']);
    } else if ($start_time && !$end_time) {
        $query->where('created_at', '>=', $start_time . ' 00:00:00');
    } else if (!$start_time && $end_time) {
        $query->where('created_at', '<=', $end_time . ' 23:59:59');
    }
    if($scale_result){
        $query->where('final_result', $scale_result);
    }
    $query->latest();
    if($category_id == 2) {
          $query->groupBy('scale_id');
    }
    $list = $query->pages($this->per_page);

    return succ($list);
}

$category_id=2 的进行了分组,想获取分组后的最新的一条数据,有没有大佬有什么比较好的方法
注:关联了 old_user、scale、admin_user、reasons 四张表,

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 8
if($category_id == 2) {
          $pageSize = 10;
         $idArr = $query->groupBy('scale_id')->select(DB::raw("max(id) as idmax"))->orderBy("idmax","desc")->offset(($this->per_page-1)*$pageSize)->limit($pageSize)->pluck("idmax")->toArray();
$queryNew = scaleOldUserResult::query();

    $queryNew ->whereIn("id",$idArr)->select(['id', 'old_user_id', 'scale_id', 'reasons_id', 'admin_user_id', 'final_result', 'created_at']);
    $queryNew ->with([
        'old_user:id,name,order,status',
        'scale:id,name,category_id',
        'admin_user:id,name',
        'reasons'
    ]);
    }else{
$queryNew = clone $query;
}
    $list = $queryNew->pages($this->per_page);
1个月前 评论
洪利 (楼主) 1个月前
小猪蹄子 (作者) 4周前

改成子查询会好点,如果数据不多,whereIn数组也可以~

4周前 评论
洪利 (楼主) 4周前
Imuyu (作者) 4周前

业务查询不同维度之间应该隔离,分组就查分组的,不分组就查不分组,方便维护和迭代。

4周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!