Представление дерева списка с использованием eloquent - PullRequest
0 голосов
/ 10 октября 2019

У меня есть эта структура таблицы ниже

ПРОСМОТР ТАБЛИЦЫ

+------+---------------+---------------+---------------+
|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  |
+------+---------------+---------------+---------------+

Как зациклить эту таблицу и сохранить в массиве и выглядеть так

LOOP

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

Это мой код, использующий eloquent, я запустил отдельную подгруппу под_группой, но не знаю, как мне получить заголовок на основе group_name и sub_group

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

Я не знаю, что делать дальше. Пожалуйста, помогите мне. Спасибо

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Как правило, вы не можете получить это легко, не имея 03 разделяя таблицу и используя красноречивые отношения, такие как здесь .

Но для вас случай с одной таблицей, возможно, это работает?

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, вам просто нужно взорваться с разделителем ,, и у вас все в одном запросе.

0 голосов
/ 10 октября 2019

Вы можете сделать это с помощью groupBy ()

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

Затем у вас будет коллекция $ group_names с ключом, таким как мобильный телефон, и подгруппами, такими как apple, samsung и т. Д.

...