Laravel 集合:只返回关系和键

Typ*_*101 1 collections laravel pluck

我有一个类似这样的集合:

$a = Model::with(['sub' => function($q) {
    $q->select('id', 'name')
}])->get();
Run Code Online (Sandbox Code Playgroud)

这将返回以下集合:

{
    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"
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

我想要做的是通过它们的 id 键输入父项,并且只返回关系。例如

{
    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"
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

我似乎无法让它发挥作用。我尝试了许多变体,包括:

$a = Model::with(['sub' => function($q) {
    $q->select('id', 'name')
}])->pluck('sub', 'id');
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为 'Pluck' 显然正在寻找名为 'sub' 的父模型的属性,该属性不会退出。有没有办法实现这一目标?

谢谢

Rwd*_*Rwd 5

你快到了。您需要->get()pluck().

$a = Model::with([
    'sub' => function ($q) {
        $q->select('id', 'name');
    },
])->get()->pluck('sub', 'id');
Run Code Online (Sandbox Code Playgroud)

pluck()您的示例中使用的将是查询生成器版本pluck,而不是收集版本。