【问题标题】:Laravel Grouping with eager loadingLaravel 使用急切加载进行分组
【发布时间】:2016-07-04 00:44:58
【问题描述】:

我想通过急切加载实现一些分组

当我做这样的事情时:

$usersWithDepartments = User::with('department')->get();

这出来了:

[
    {
        "userID": 491,
        "userName": "gigi"
        "deparment": 
        {
            "departmentID": 1,
            "name": "Economy"
        }
    },
    {
        "userID": 444,
        "userName": "gigi2"
        "deparment": 
        {
            "departmentID": 1,
            "name": "Economy"
        }
    }
]

但我想知道是否可以这样做:

$usersWithDepartments = User::with('department')->groupBy('deparment')->get();

为了得到这样的 JSON:

[
    {
        "departmentID": 1,
        "name": "Economy",
        "users":
        [
            {
                "userID": 491,
                "userName": "gigi"            
            },
            {
                "userID": 444,
                "userName": "gigi2"            
            }            
        ]
    }
]

我知道我可以做Department::with('users'),但我想保留上面的相同查询,以免进行另一个查询调用

如果不可能的话。是否有其他解决方法?

【问题讨论】:

  • 看起来Department::with('users') 正是你想要的,我不明白你想要“保持相同的查询”
  • 我的问题是一个大型查询的简化示例,在我的原始查询中,我有近 4 个连接,包括急切加载的连接。我不想做 Department::with('users') 因为这意味着再次运行巨大的原始查询。

标签: php json laravel laravel-5 eager-loading


【解决方案1】:

是的,你可以这样做

$usersWithDepartments = User::with('department')->groupBy('departmentID');
     $usersWithDepartments->toJson();

【讨论】:

  • 实际上,我没有找到“部门”列。我认为 groupBy 方法中的参数是列名,而不是模型之间定义的关系。还是我错了?
  • 我刚刚编辑了列名'departmentID'看看我编辑的答案
  • 我只是这样做了,但仍然无法正常工作。它不像我的问题那样做一个分组的 JSON。
  • 试试这个 $usersWithDepartments->toJson();
猜你喜欢
  • 2019-07-06
  • 2018-02-20
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多