Laravel 集合:return 只有关系和键
Laravel collection: return only relationship and key
我有一个类似这样的集合:
$a = Model::with(['sub' => function($q) {
$q->select('id', 'name')
}])->get();
这 return 是以下合集:
{
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"
}
]
}
我想做的是通过它们的 id 来键控父项,并且只有 return 关系。例如
{
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' 的父模型的 属性,它不会退出。有办法实现吗?
谢谢
使用 keyBy
将您的 pk 用作数组索引。
https://laravel.com/docs/5.4/collections#method-keyby
但是忽略其他字段,您可能需要 each
和 filter
。 select Sub::where(...)
然后在 parent_id 上使用集合 groupBy
不是更容易吗: https://laravel.com/docs/5.4/collections#method-groupby
所以像 Sub::where(...)->get()->groupBy('parent_id')
你快到了。您需要在 pluck()
.
之前执行 ->get()
$a = Model::with([
'sub' => function ($q) {
$q->select('id', 'name');
},
])->get()->pluck('sub', 'id');
您的示例中使用的 pluck()
将是 pluck
的查询构建器版本,而不是集合版本。
我有一个类似这样的集合:
$a = Model::with(['sub' => function($q) {
$q->select('id', 'name')
}])->get();
这 return 是以下合集:
{
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"
}
]
}
我想做的是通过它们的 id 来键控父项,并且只有 return 关系。例如
{
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' 的父模型的 属性,它不会退出。有办法实现吗?
谢谢
使用 keyBy
将您的 pk 用作数组索引。
https://laravel.com/docs/5.4/collections#method-keyby
但是忽略其他字段,您可能需要 each
和 filter
。 select Sub::where(...)
然后在 parent_id 上使用集合 groupBy
不是更容易吗: https://laravel.com/docs/5.4/collections#method-groupby
所以像 Sub::where(...)->get()->groupBy('parent_id')
你快到了。您需要在 pluck()
.
->get()
$a = Model::with([
'sub' => function ($q) {
$q->select('id', 'name');
},
])->get()->pluck('sub', 'id');
您的示例中使用的 pluck()
将是 pluck
的查询构建器版本,而不是集合版本。