Laravel使用addSelect()报错:Unknown column '4' in 'field list'
Laravel addSelect 统计字段报错的问题分析与解决
问题根源
你遇到的报错是因为直接把统计好的数值传给了addSelect——比如你可能提前算出了未完成任务数(比如4),然后写了addSelect($count)。Laravel会把这个数值当成数据库列名处理,所以生成的SQL里会出现select 4fromprojects``,自然找不到对应列。
正确写法
要让Laravel识别这是统计逻辑而非字段名,有两种常用实现方式:
方式1:用子查询构建统计
$userId = auth()->id(); $projects = Project::query() ->select('*') // 先获取Project的所有字段 ->addSelect([ 'number_of_tasks' => Task::query() ->whereColumn('project_id', 'projects.id') // 关联项目ID ->where('user_id', $userId) // 当前登录用户 ->where('completed', false) // 未完成任务 ->selectRaw('count(*)') ]) ->get();
方式2:用DB::raw写原生统计语句
$userId = auth()->id(); $projects = Project::query() ->select('*') ->addSelect(DB::raw('(SELECT COUNT(*) FROM tasks WHERE tasks.project_id = projects.id AND tasks.user_id = ? AND tasks.completed = 0) AS number_of_tasks', [$userId])) ->get();
为什么加select()无效?
你之前加select('*')没用,是因为问题出在addSelect的参数类型错误,不是没选全字段。就算选了所有字段,错误的参数依然会被Laravel当成列名解析,所以还是会报错。
内容的提问来源于stack exchange,提问作者Telexx
相关产品推荐
相关产品推荐

