Как извлечь массив данных нескольких столбцов mysql Laravel

Использую laravel - eloquent и хочу получить массив значений нескольких столбцов без повторений.

Есть таблица продуктов такого вида:

id |   title   | category |  brand  |  color  |  stock
1    product 1    phone      apple      red     in-stock
2    product 2    phone     samsung    black    in-stock

Чтобы получить все данные из столбца "brand" я делаю так:

public static function getAllAvailableAttributes ($category) {
        return static::select(['brand', 'color'])
            ->where([
                ['category', $category],
                ['stock', 'in-stock'],
            ])

            ->distinct()
            ->pluck('brand')
            ->toArray();
    }

В итоге получаю что-то подобное:

array:2 [▼
  0 => "apple"
  1 => "samsung"

]

Как я могу получить оба столбца одновременно и привести к такому виду:

array:2 [▼
   "brand" => array:2 [▼
     0 => "apple"
     1 => "samsung"
   ]
   "color" => array:2 [▼
     0 => "red"
     1 => "black"
   ]
]

P.S. Чисто теоретически, я могу поочередно получать эти столбцы методом выше. Но я думаю это нелогично. Столбцов будет много и не вижу смысла каждый раз обращаться к базе данных, а лучше сделать это 1 раз.

Заранее спасибо. Очень надеюсь, что я доступно смог доступно объяснить свою задачу.


Ответы (1 шт):

Автор решения: sterx

group_concat

(SELECT group_concat(distinct(brand)) as list FROM products) union (SELECT group_concat(distinct(color)) as list FROM products)

порядковому номеру аргументов соответствует список соответствующей строки DB разбить строку в массив несложно

→ Ссылка