Laravel 带有字段限制的预加载
Laravel eager loading with field limit
我有三个表:
用户
- id
- 名字
- role_id
- 密码
- ...
role_user
- id
- role_id
- user_id
角色
- id
- 名字
- 鼻涕虫
- ...
现在我想获取 users.id,users.name 的用户列表,
roles.id。那是我的代码:
$query = User::with(['roles'=>function($q){
$q->lists('role_id');
}])->get(['id','name']);
这样的回应
{
"id": "1",
"name": "aaaa",
"roles": []
},
{
"id": "2",
"name": "bbbb",
"roles": []
},
当我不将数组传递给 get 方法时,响应如下:
{
"id": 1,
"name": "aaaa",
"password": "xxxxxxx",
"created_at": "2015-05-07 14:15:00",
"roles": [
{
"role_id": 2,
"pivot": {
"user_id": 1,
"role_id": 2
}
}
]
},
{
"id": 2,
"name": "bbbb",
"password": "xxxxxxx",
"created_at": "2015-05-05 14:15:00",
"roles": [
{
"role_id": 2,
"pivot": {
"user_id": 2,
"role_id": 2
}
}
]
},
但我不想要密码,created_at 和数据透视字段。如何过滤这些?
要获得关系,您需要获得外键。试试这个
$query = User::with(['roles'=>function($q){
$q->get(['id', 'name', 'slug']);
}])->get(['id','name', 'role_id']);
至于枢轴table,你能post你在用户模型中的角色关系吗?
编辑
将此添加到您的用户模型以隐藏数据透视属性
protected $hidden = ['pivot'];
您可以向该字段添加更多字段 属性 以将其从所有查询中删除。
我有三个表:
用户
- id
- 名字
- role_id
- 密码
- ...
role_user
- id
- role_id
- user_id
角色
- id
- 名字
- 鼻涕虫
- ...
现在我想获取 users.id,users.name 的用户列表, roles.id。那是我的代码:
$query = User::with(['roles'=>function($q){
$q->lists('role_id');
}])->get(['id','name']);
这样的回应
{
"id": "1",
"name": "aaaa",
"roles": []
},
{
"id": "2",
"name": "bbbb",
"roles": []
},
当我不将数组传递给 get 方法时,响应如下:
{
"id": 1,
"name": "aaaa",
"password": "xxxxxxx",
"created_at": "2015-05-07 14:15:00",
"roles": [
{
"role_id": 2,
"pivot": {
"user_id": 1,
"role_id": 2
}
}
]
},
{
"id": 2,
"name": "bbbb",
"password": "xxxxxxx",
"created_at": "2015-05-05 14:15:00",
"roles": [
{
"role_id": 2,
"pivot": {
"user_id": 2,
"role_id": 2
}
}
]
},
但我不想要密码,created_at 和数据透视字段。如何过滤这些?
要获得关系,您需要获得外键。试试这个
$query = User::with(['roles'=>function($q){
$q->get(['id', 'name', 'slug']);
}])->get(['id','name', 'role_id']);
至于枢轴table,你能post你在用户模型中的角色关系吗?
编辑 将此添加到您的用户模型以隐藏数据透视属性
protected $hidden = ['pivot'];
您可以向该字段添加更多字段 属性 以将其从所有查询中删除。