php - Laravel Eloquent 嵌套组的关系

标签 php laravel laravel-5 eloquent

请帮助我如何根据游戏类别关系添加另一个嵌套组。我有 3 个使用 laravel 5.4 eloquent 相关的表。

游戏提供商表

+----+-------------+--------------+------------------+
| id | game_name   | game_type_id | game_category_id |
+----+-------------+--------------+------------------+
|  1 | Sample      |      1       |         1        |
|  1 | Sample 0    |      1       |         2        |
|  2 | Sample 1    |      2       |         1        |
|  3 | Sample 2    |      2       |         2        |
+----+-------------+--------------+------------------+

游戏类型

+----+-------------+
| id | name        |
+----+-------------+
|  1 | Chess       |
|  2 | Poker       |
+----+-------------+

游戏类别

+----+-------------+
| id | name        |
+----+-------------+
|  1 | Recommended |
|  2 | Optional    |
+----+-------------+

我已经完成了第一个嵌套的游戏类型关系,但我不知道如何为游戏类别添加另一个组

$game_providers = GameProvider::all();

$game_providers = $game_providers->groupBy(function ($game_provider) {
    return $game_provider->game_type->name;
})->all();

及其输出

Array{
 'Chess' => Array{
    0 => Array{
     'id'               => 1,
     'game_name'        => 'Sample',
     'game_type_id'     => 1,
     'game_category_id' => 2
    },
    1 => Array{
     'id'               => 2,
     'game_name'        => 'Sample 0',
     'game_type_id'     => 1,
     'game_category_id' => 2
    },
  },
 'Poker' => Array{
    0 => Array{
     'id'               => 3,
     'game_name'        => 'Sample 1',
     'game_type_id'     => 2,
     'game_category_id' => 1
    },
    1 => Array{
     'id'               => 4,
     'game_name'        => 'Sample 2',
     'game_type_id'     => 2,
     'game_category_id' => 2
    },
  },
}

我的预期输出

Array{
 'Chess' => Array{
    'Recommended' => Array{
        0 => Array{
           'id'               => 1,
            'game_name'        => 'Sample',
            'game_type_id'     => 1,
            'game_category_id' => 2
        }
    },
    'Optional' => Array{
        0 => Array{
            'id'               => 2,
            'game_name'        => 'Sample 0',
            'game_type_id'     => 1,
            'game_category_id' => 2
        }
    }
  },
 'Poker' => Array{
    'Recommended' => Array{
        0 => Array{
            'id'               => 3,
            'game_name'        => 'Sample 1',
            'game_type_id'     => 2,
            'game_category_id' => 1
        }
    },
    'Optional' => Array{
        0 => Array{
            'id'               => 4,
            'game_name'        => 'Sample 2',
            'game_type_id'     => 2,
            'game_category_id' => 2
        }
    }     
  }
}

最佳答案

使用 L5,实现这一目标的一种方法是:

GameProvider::with('game_categories.game_types')
    ->get()
    ->groupBy([
        'gameTypes.name',
        'gameCategories.name'
    ]);

关于php - Laravel Eloquent 嵌套组的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52000164/

相关文章:

php在foreach中倒序时间段

php - Laravel 返回带有旧输入的页面以进行验证

php - 将模型转换为数组或 JSON 时无法访问 Laravel 模型访问器

php - laravel Eloquent 地按多列排序并在一列中显示

PHP MySQL : find expired dates in table and extend them

PHP 检索位掩码值

php - 更改/修改 Facebook 'Like it' 按钮的样式

javascript - 如何在 laravel 中使用 jquery 从数据库中获取特定行并将其绑定(bind)到文本框字段

ios - Xcode 中的 Alamofire 请求 "status_code"= 401

php - 从中间件访问路由前缀中的 URL 参数