使用 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_name
和 sub_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
上的叶子,您只需使用 ,
分隔符进行分解,一次查询即可。
我下面有这个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_name
和 sub_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
上的叶子,您只需使用 ,
分隔符进行分解,一次查询即可。