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

Laravel中使用withCount与Case语句时字段不存在的解决方法

问题原因

你遇到的报错是因为Laravel查询构建器中,selectRaw()会替换之前已定义的select字段集合,而非追加。原代码的执行逻辑导致最终查询中不存在relation_1_count这类字段:

  1. 先执行select('id'),此时查询字段仅包含id
  2. 调用withCount()会自动往select集合追加relation_1_count、relation_2_count、relation_3_count三个统计字段
  3. 最后调用selectRaw()直接覆盖了所有之前的select字段,最终查询仅保留model_status,自然找不到统计字段
解决方法

将selectRaw()替换为addSelect(),它会在已有的select字段集合后追加新字段,保留withCount()生成的统计值:

use Illuminate\Support\Facades\DB;

Model::query()
    ->select('id')
    ->withCount(['relation_1', 'relation_2', 'relation_3'])
    ->addSelect(
        DB::raw('(CASE
            WHEN relation_1_count < 0 THEN "relation 1 failed"
            WHEN relation_1_count > 0 and relation_2_count < 0 THEN "relation 2 failed"
            WHEN relation_1_count > 0 and relation_2_count > 0 and relation_3_count < 0 THEN "relation 3 failed"
            ELSE "All relations passed"
        END) AS model_status')
    )
    ->get();
额外提示

withCount()统计的是关联模型的数量,结果必然是非负整数(≥0),你代码中判断<0的逻辑永远不会触发,建议根据实际需求调整为=0(表示无关联数据)或其他合理条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:25:35