Laravel Eloquent GroupBy Name для создания массива идентификаторов - PullRequest
0 голосов
/ 21 января 2019

В моем приложении Laravel есть таблица, которую я хочу запросить.

id | company_name | contact |
-----------------------------
1  | Tesco        | Name 1  |
2  | Tesco        | Name 2  |
3  | Asda         | Name 3  |
4  | Tesco        | Name 4  |
5  | Asda         | Name 5  |

Я пытаюсь получить массив всех уникальных названий компаний со всеми идентификационными номерами.

'Tesco' => [1,2,4]
'Asda' => [3,5]

Я пытался

$companies = Contact::select('company_name','id')->groupBy('company_name')->get();

Однако это требует, чтобы «id» был включен в группу, в которой победил цель. Я понимаю, что он просит об этом, потому что это не СУММА или СЧЕТ и т. Д.

Таблица выше может показаться необычной, и я знаю, что я должен иметь отношение к таблице компаний, однако это необходимо на данном этапе.

1 Ответ

0 голосов
/ 21 января 2019

Вы можете использовать GROUP_CONCAT()

$companies = Contact::select('company_name', DB::raw('GROUP_CONCAT(id) as ids'))
    ->groupBy('company_name')
    ->get();

Это вернет что-то вроде:

company_name | ids
Tesco        | 1,2

Редактировать: , если вы хотите, чтобы идентификаторы в формемассив, вы можете просто сопоставить коллекцию, чтобы преобразовать ее:

$companies->map(function($column) {
    $column->ids = explode(',', $column->ids);
});

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...