用 with 关联查询一对多的两张表,没法用 select 控制想输出的字段?

客户表和用户表,多对一.
如果只通过select筛选用户表的字段,那一切正常的,如

$res = Customer::with(['user' => function ($query) {
        $query->select(['id', 'name', 'status']);
    }])->get();
return $res;
{
    "customers": [
        {
            "id": 2,
            "company_id": 2,
            "name": "xxk1",
            "user_id": 2,
            "user": {
                "id": 2,
                "name": "kkk",
                "status": 1,
            }
        },
        {
            "id": 3,
            "company_id": 1,
            "name": "xxk21",
            "user_id": 1,
            "user": {
                "id": 1,
                "name": "wmk",
                "status": 1,
            }
        }
}

但是如果客户表也只需要输出若干字段,这样写,结果里的user项就会为空,怎么搞?

$res = Customer::with(['user' => function ($query) {
        $query->select(['id', 'name', 'status']);
    }])->select('id', 'name' )->get();
return $res;
{
    "customers": [
        {
            "id": 2,
            "name": "xxk1",
            "user": null
        },
        {
            "id": 3,
            "name": "xxk21",
            "user": null
        },
    ]
}
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3
leo

@llh 你说的对,但是代码好像不对,我来补充下

 Customer::with(['user' => function ($query) {
        $query->select(['id', 'name', 'status']);
}])->select(['id', 'name', 'user_id'])->get();
7年前 评论
No_Panic

要先选择Customer的id,不然怎么去找关联呢

Customer::select('id', 'name' ) ->with(['user' => function ($query) {
$query->select(['id', 'name', 'status']);
}])->get();

7年前 评论

@llh thx.
select要加user_id,否则user就为空
$res = Customer::with(['user' => function ($query) {
$query->select(['id', 'name', 'status']);
}])->select('id', 'name', 'user_id')->get();
return $res;

7年前 评论
leo

@llh 你说的对,但是代码好像不对,我来补充下

 Customer::with(['user' => function ($query) {
        $query->select(['id', 'name', 'status']);
}])->select(['id', 'name', 'user_id'])->get();
7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!