Php 如何按列创建groupBy()雄辩的集合?

Php 如何按列创建groupBy()雄辩的集合?,php,laravel,collections,eloquent,Php,Laravel,Collections,Eloquent,我有一个程序表,它涉及位置、专业、年级、类型表。我想根据专业和类型集合的位置对程序进行分组。我可以按garde_id对它们进行分组,但我希望使用年级名称而不是年级id $programs=Program::whereLocation\u id($location->id) ->带(‘地点’、‘部门’、‘专业’、‘年级’) ->最新()->get(); $programs->groupBy('grade_id'); 结果 [ 1 => ['department-name','maj

我有一个程序表,它涉及位置、专业、年级、类型表。我想根据专业和类型集合的位置对程序进行分组。我可以按garde_id对它们进行分组,但我希望使用年级名称而不是年级id

$programs=Program::whereLocation\u id($location->id)
->带(‘地点’、‘部门’、‘专业’、‘年级’)
->最新()->get();
$programs->groupBy('grade_id');
结果

[
    1 => ['department-name','major-name','title'],
    2 => ['department-name','major-name','title']
]
预期的

[
  'phd' => ['department-name','major-name','title'],
  'M.S' => ['department-name','major-name','title']
]

用雄辩的语言来完成这个任务的最佳查询是什么?

您可以从成绩中检索程序,您将得到预期的结果。 我猜等级模型中的关系名称叫做“程序”

$locationId = $location->id;
$grades = Grade::whereHas('programs', function($query) use ($locationId) {
    $query->where('location_id', $locationId);
})->with(['programs' => function ($query) use ($locationId) {
    $query->where('location_id', $locationId);
    $query->with('location','department','major');

    return $query;
}])->get();
你将有一个等级集合,每个等级都有自己的课程。 您还可以按年级名称分组:

$grades->groupBy('name');

您可以从成绩中检索程序,您将获得预期的结果。 我猜等级模型中的关系名称叫做“程序”

$locationId = $location->id;
$grades = Grade::whereHas('programs', function($query) use ($locationId) {
    $query->where('location_id', $locationId);
})->with(['programs' => function ($query) use ($locationId) {
    $query->where('location_id', $locationId);
    $query->with('location','department','major');

    return $query;
}])->get();
你将有一个等级集合,每个等级都有自己的课程。 您还可以按年级名称分组:

$grades->groupBy('name');

对于您的案例,另一个解决方案是:

$grouped = $programs->groupBy(function ($item, $key) {
    return $item['grade']->name; // Setting grade name as key
});

对于您的案例,另一个解决方案是:

$grouped = $programs->groupBy(function ($item, $key) {
    return $item['grade']->name; // Setting grade name as key
});

此解决方案不起作用,因为我们的项目中没有“等级”,我们有等级_id@Peymanabdollahy您添加了带有('location'、'department'、'major'、'grade')的'grade'关系
->
,因此我认为$item['grade']或$item->grade应该为您提供该关系。groupBy似乎对关系项不起作用。此解决方案不起作用,因为我们的项中没有“等级”,我们有等级_id@Peymanabdollahy您添加了带有('location'、'department'、'major'、'grade')的'grade'关系
->
,因此我认为$item['grade']或$item->grade应该为您提供该关系。groupBy似乎对关系项不起作用。这似乎是一种工作,我将测试它并让其他人知道。谢谢你的回答。这个查询有一个问题,它返回所有的成绩,甚至没有任何程序的成绩。“我想删除它们。@Peymanabdollahy再次检查答案。我在查询中添加了whereHas。这似乎是一种工作,我将测试它并让其他人知道。谢谢你的回答。这个查询有一个问题,它返回所有的成绩,甚至没有任何程序的成绩。“我想删除它们。@Peymanabdollahy再次检查答案。我在查询中添加了“whereHas”。