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

Laravel 8中withCount仅返回ID,无法获取用户任务关联计数

Laravel 8 Eloquent关联计数不显示的问题排查

问题场景

使用Laravel 8的Eloquent查询构建器,想要统计每个用户被分配的任务数量,但关联任务计数未正常显示。

数据库结构及示例数据

create table user_tasks (
    id integer primary key,
    user_id integer not null
);

create table users (
    id integer primary key,
    name text not null
);

insert into user_tasks values (1, 1);
insert into user_tasks values (2, 2);
insert into user_tasks values (3, 1);
insert into user_tasks values (4, 1);
insert into user_tasks values (5, 1);
insert into user_tasks values (6, 2);

insert into users values (1, 'joe');
insert into users values (2, 'sally');
insert into users values (3, 'bob');

期望输出

1, 'joe', 4
2, 'sally', 2
3, 'bob', 0

现有代码

class User extends Model {
    public function getTaskCount()
    {
        return $this->hasMany('App\Models\User\Task', 'user_id');
    } 
}

$result = User::select(['id'])
    ->withCount('getTaskCount')
    ->get();

实际输出

[
    {
        "id": 1
    },
    {
        "id": 2
    },
    {
        "id": 3
    }
]

问题原因及解决方法

1. 关联方法命名不符合Eloquent规范

Eloquent关联方法需使用驼峰式命名(不含get前缀),getTaskCount的命名会导致withCount无法正确识别关联关系。

修正关联方法:

class User extends Model {
    // 改为符合规范的命名
    public function tasks()
    {
        return $this->hasMany('App\Models\User\Task', 'user_id');
    } 
}

2. select未包含所需字段

当前仅选择id字段,结果自然不会包含name和计数字段。需添加name字段到select中,withCount生成的计数字段默认格式为{关联名}_count,此处对应tasks_count。

修正查询代码:

$result = User::select(['id', 'name'])
    ->withCount('tasks')
    ->get();

3. 模型与数据表的映射问题

关联模型App\Models\User\Task默认对应的数据表是tasks,但你的表名为user_tasks,需在Task模型中指定表名:

class Task extends Model {
    protected $table = 'user_tasks';
}

最终输出效果

修正后查询结果会包含预期字段:

[
    {
        "id": 1,
        "name": "joe",
        "tasks_count": 4
    },
    {
        "id": 2,
        "name": "sally",
        "tasks_count": 2
    },
    {
        "id": 3,
        "name": "bob",
        "tasks_count": 0
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:50:18