Php 将Laravel雄辩的结果映射到多维数组?

Php 将Laravel雄辩的结果映射到多维数组?,php,eloquent,laravel-5.3,Php,Eloquent,Laravel 5.3,因此,我有一个包含三列的db表:client,project,和size 每个客户机都与许多项目相关联,每个项目都与许多规模相关联。使用Eloquent,我试图找到最有效的方法来提取数据并将其放入如下所示的数组: $array = [ [ 'client1' => [ 'project' => 'Alpha', 'sizes' => ['300', '400', '5

因此,我有一个包含三列的db表:
client
project
,和
size

每个客户机都与许多项目相关联,每个项目都与许多规模相关联。使用Eloquent,我试图找到最有效的方法来提取数据并将其放入如下所示的数组:

    $array = [
        [
            'client1' => [
                'project' => 'Alpha',
                'sizes' => ['300', '400', '500']
            ]
        ],
        [
            'client2' => [
                'project' => 'Delta',
                'sizes' => ['200', '400', '600']
            ]
        ],
    ];
$data = Client::with(project.size)->get();

似乎我可以使用嵌套的foreach循环,从客户机到项目再到大小,但在Laravel中肯定有更好的方法。文档有点稀疏,我找不到一个明显的方法来做到这一点。最好的办法是什么?或者我的方法是否正确?

我不确定这是否正确,因为您没有包括有说服力的查询或表结构

定义模型关系后, 我是这样做的:

    $array = [
        [
            'client1' => [
                'project' => 'Alpha',
                'sizes' => ['300', '400', '500']
            ]
        ],
        [
            'client2' => [
                'project' => 'Delta',
                'sizes' => ['200', '400', '600']
            ]
        ],
    ];
$data = Client::with(project.size)->get();
它所做的是,Elount将使用客户表,并显示所有客户机,并访问每个客户机的项目和项目大小

但这只有在正确设计数据库并定义正确的模型关系时才能起作用

假设您有3个表,客户机、项目和大小,每个表都有各自的外键

模型关系的示例:

客户机型号:

public function project()
{
    return $this->hasMany('App\Project');
}

public function size()
{
    return $this->hasManyThrough('App\Size','App\Project');
}
项目模型:

public function client()
{
    return $this->belongsTo('App\Client');
}

public function size()
{
    return $this->hasMany('App\Size');
}
尺寸型号:

public function project()
{
    return $this->belongsTo('App\Project');
}

我懂了。所以我需要把这些列放在不同的表中?现在他们都在同一张叫做“工作”的表格里。是的,应该是这样的。您应该“规范化”您的数据库。