用 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
        },
    ]
}
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 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年前 评论

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