我有一个类似于此的集合:
$a = Model::with(['sub' => function($q) {
$q->select('id', 'name')
}])->get();
返回以下集合:
{
0: {
id: 0001,
name: "item 1",
type: "type a"
'sub' [
{
'id': 10001,
'name': "sub Item 1"
},
{
'id': 10002,
'name': "sub Item 2"
}
]
},
1: {
id: 0002,
name: "item 2",
type: "type a"
'sub' [
{
'id': 11001,
'name': "sub Item 4"
},
{
'id': 11002,
'name': "sub Item 5"
}
]
}
我要做的是按父项键入父项,只返回关系。例如
{
0001: {
'sub' [
{
'id': 10001,
'name': "sub Item 1"
},
{
'id': 10002,
'name': "sub Item 2"
}
]
},
0002: {
'sub' [
{
'id': 11001,
'name': "sub Item 4"
},
{
'id': 11002,
'name': "sub Item 5"
}
]
}
我似乎无法让这个工作。我尝试了很多变化,包括:
$a = Model::with(['sub' => function($q) {
$q->select('id', 'name')
}])->pluck('sub', 'id');
这不起作用,因为'Pluck'显然正在寻找父模型的属性,其名称为'sub',不会退出。有没有办法实现这个目标?
由于
答案 0 :(得分:1)
你快到了。您需要在->get()
之前pluck()
。
$a = Model::with([
'sub' => function ($q) {
$q->select('id', 'name');
},
])->get()->pluck('sub', 'id');
示例中使用的pluck()
将是pluck
的查询构建器版本,而不是集合版本。
希望这有帮助!
答案 1 :(得分:0)
使用keyBy
将您的pk用作数组索引。
https://laravel.com/docs/5.4/collections#method-keyby
但是,忽略其他字段,您可能需要each
和filter
。选择Sub::where(...)
然后在parent_id上使用集合groupBy
不是更容易:https://laravel.com/docs/5.4/collections#method-groupby
类似于Sub::where(...)->get()->groupBy('parent_id')