将Laravel Eloquent结果映射到多维数组?

时间:2017-02-04 00:02:06

标签: php eloquent laravel-5.3

所以我有一个包含三列的数据库表:clientprojectsize

每个客户都与许多项目相关联,并且每个项目都与许多大小相关联。使用Eloquent,我正在尝试找到最有效的方法来提取数据并将其放入一个如下所示的数组中:

    $array = [
        [
            'client1' => [
                'project' => 'Alpha',
                'sizes' => ['300', '400', '500']
            ]
        ],
        [
            'client2' => [
                'project' => 'Delta',
                'sizes' => ['200', '400', '600']
            ]
        ],
    ];

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

1 个答案:

答案 0 :(得分:0)

我不确定这是否正确,因为您没有包含您的雄辩查询或表格结构。

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

$data = Client::with(project.size)->get();

它的作用是,eloquent将使用Client表,并显示所有客户端,并访问每个客户端的项目和项目大小。

但这只有在您正确设计数据库并定义正确的模型关系时才有效。

假设您有3个表,Client,Project和Size,并且每个表都有相应的外键。

模型关系的示例:

客户端模型:

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');
}