如何使用 Laravel Eloquent 连接表后将结果分组为嵌套数组

Dic*_*han 1 php laravel eloquent laravel-5

就我的情况而言,我有两个具有一对多关系的表(集合、产品)。

通过代码示例,它是:

$collectionProducts = collections::join('products', 'products.collection_id', '=', 'collections.collection_id')->get();
Run Code Online (Sandbox Code Playgroud)

我目前的结果是:

[
  Collection 1 Product 1 => [
    ...Product Info
  ],
  Collection 1 Product 2 => [
    ...Product Info
  ],
  Collection 2 Product 1 => [
    ...Product Info
  ],
  Collection 2 Product 3 => [
    ...Product Info
  ],
]
Run Code Online (Sandbox Code Playgroud)

我想让结果像:

[
  Collection 1 => [
    Product 1 => [
        ...Product Info
    ],
    Product 2 => [
        ...Product Info
    ],
  ],
  Collection 2 => [
    Product 1 => [
        ...Product Info
    ],
    Product 3 => [
        ...Product Info
    ],
  ]
]
Run Code Online (Sandbox Code Playgroud)

我怎样才能达到我的预期结果?我知道这是常见用法,如果之前有任何重复的问题,我很抱歉,因为我找不到任何匹配的问题。

多谢。

Wat*_*man 5

Laravel 及其 Eloquent 关系非常擅长让我们轻松实现这一点,而无需繁琐的连接。

在您的Collection模型上创建与产品的关系:

 public function products()
{
    return $this->hasMany("App\Product");
} 
Run Code Online (Sandbox Code Playgroud)

然后,在绘制集合时,您可以将产品包含在急切加载中,以便对数据库进行一次简单调用:

$collections = Collection::with('products')->get();
Run Code Online (Sandbox Code Playgroud)

你已经得到了你想要的收藏。您可以从循环中提取所有产品$collection或从这里提取您喜欢的任何产品。

刀片视图中的示例:

 @foreach($collections as $collection)
     @foreach($collection->products as $product) 

            {{ $product->name }} //etc
Run Code Online (Sandbox Code Playgroud)