用 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
},
]
}
高认可度评论:
@llh 你说的对,但是代码好像不对,我来补充下
要先选择Customer的id,不然怎么去找关联呢
Customer::select('id', 'name' ) ->with(['user' => function ($query) {
$query->select(['id', 'name', 'status']);
}])->get();
@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;
@llh 你说的对,但是代码好像不对,我来补充下