You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8中如何编写数据库查询获取cart列值为1的所有记录

错误原因

  • 语法误用:你的需求是筛选cart值等于1的记录,不需要用到GROUP BY分组聚合逻辑,错误使用GROUP BY+HAVING是触发报错的核心原因
  • MySQL约束冲突:MySQL开启了sql_mode=only_full_group_by模式,要求SELECT查询的列要么出现在GROUP BY子句中,要么使用聚合函数(SUM/COUNT等)包裹,你执行select *但仅按cart字段分组,不符合约束要求所以报错
  • 原有代码逻辑冗余错误:$books=Books::all()是查询全表图书的集合,直接给集合属性user_id赋值属于无效操作,后续的用户关联判断逻辑也存在语法错误

修复代码

你注释的筛选写法逻辑方向是对的,补充当前登录用户的关联筛选即可,两种实现方式任选:

查询构造器实现

public function cartItem(){
    $books = DB::table('books')
        ->where('user_id', auth()->id())
        ->where('cart', 1)
        ->get();
    return response()->json(['books' => $books], 200);
}

Eloquent模型实现

public function cartItem(){
    $books = Books::where('user_id', auth()->id())
        ->where('cart', 1)
        ->get();
    return response()->json(['books' => $books], 200);
}

扩展说明(非当前需求场景)

如果后续确实有按cart分组做聚合统计的需求,需要明确指定查询的聚合字段,示例如下:

// 统计每个cart值对应的图书数量
$cartStats = DB::table('books')
    ->select('cart', DB::raw('COUNT(*) as book_count'))
    ->groupBy('cart')
    ->get();

内容的提问来源于stack exchange,提问作者user16172211

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 20:24:03