使用 eloquent 列出树视图

List tree view using eloquent

我下面有这个table结构

TABLE 查看

+------+---------------+---------------+---------------+
|id    |  group_name   |   sub_group   |    title      |
+------+---------------+---------------+---------------+
|1     |  Mobile Phone |   Apple       |  Iphone X     |
|2     |  Mobile Phone |   Apple       |  Iphone 7 Plus|
|3     |  Mobile Phone |   Samsung     |  J6 Plus      |
|4     |  Mobile Phone |   Nokia       |  XpressMusic  |
+------+---------------+---------------+---------------+

如何循环这个 table 并存储在一个数组中,看起来像这样

循环

Mobile Phone
    -> Apple
        -> Iphone X
        -> Iphone 7 Plus
    -> Samsung
        -> J6 Plus
    -> Nokia
        -> XpressMusic 

这是我使用 eloquent 的代码,我在 group_name sub_group 下有 运行 个不同的但我不知道如何获得基于标题在 group_namesub_group

$group_names = ThisIsModel::distinct()->orderBy('group_name', 'asc')->get(['group_name']);

我不知道接下来要做什么。请帮我。谢谢

您可以使用 groupBy()

$group_names = Employee::query()
            ->orderBy('sub_group', 'asc')
            ->get()
            ->groupBy('group_name','sub_group');

然后您将在 $group_names 上拥有一个集合,其中包含 Mobile phone 等键和 apple、samsung 等子组

通常情况下,如果没有 03 分隔符 table 并使用 eloquent 关系,例如 .

,您将无法轻松做到这一点

但是对于单身 table 的情况,也许这可行?

ThisIsModel::select(DB::raw("group_concat(distinct(group_name)) as group_name, group_concat(distinct(sub_group)) as sub_group, group_concat(title) as title"))->groupBy('sub_group', 'group_name')->get()->groupBy('group_name')->toArray();

结果如下:

[
     "Mobile Phone" => [
       [
         "group_name" => "Mobile Phone",
         "sub_group" => "Apple",
         "title" => "Iphone X,Iphone 7 Plus",
       ],
       [
         "group_name" => "Mobile Phone",
         "sub_group" => "Nokia",
         "title" => "XpressMusic",
       ],
       [
         "group_name" => "Mobile Phone",
         "sub_group" => "Samsung",
         "title" => "J6 Plus",
       ],
     ],
   ]

要获取 title 上的叶子,您只需使用 , 分隔符进行分解,一次查询即可。