用 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
        },
    ]
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 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年前 评论

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