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

Laravel查询构造器selectRaw用表别名时出现SQLSTATE[42S22]列不存在错误

问题解决

错误原因

  1. 列名不匹配:你的订单表中存储订单总额的字段是order_total,但代码里写的是orders.total,数据库找不到这个列
  2. 生成的SQL里表名自动带了tm_前缀(tm_orders、tm_order_products),这是Laravel配置的表前缀在生效,属于正常情况,不是报错原因

修正后的查询代码

$result = DB::table('orders')
            ->selectRaw('SUM(orders.order_total) as total, order_products.name')
            ->join('order_products', 'order_products.order_id', '=', 'orders.order_id')
            ->groupByRaw('order_products.name')
            ->get();

额外注意点

如果一个订单包含多个同名称的商品,当前逻辑会重复累加该订单的总额。如果需要统计每个商品对应的唯一订单总金额,需要先对订单去重,示例代码如下:

$result = DB::table('orders')
            ->selectRaw('SUM(orders.order_total) as total, op.name')
            ->joinSub(
                DB::table('order_products')->select('order_id', 'name')->distinct(),
                'op',
                'op.order_id',
                '=',
                'orders.order_id'
            )
            ->groupBy('op.name')
            ->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:50:28