laravel показать две таблицы данных, сгруппированных в одну - PullRequest
0 голосов
/ 13 марта 2020

У меня есть две таблицы с именами paths и stoppages, структурированные как:

ПУТИ:

_____________________________
| id | source | destination |
|____|________|_____________|
|  1 |   a    |    b        |
|____|________|_____________|
|  2 |   a    |    c        |
|____|________|_____________|
|  3 |   d    |    e        |
|____|________|_____________|

ОСТАНОВКИ:

________________________
| id | path_id | point |
|____|_________|_______|
|  1 |   1     |   p1  |
|____|_________|_______|
|  1 |   1     |   p2  |
|____|_________|_______|
|  1 |   1     |   p3  |
|____|_________|_______|
|  1 |   2     |   p4  |
|____|_________|_______|
|  1 |   2     |   p5  |
|____|_________|_______|
|  1 |   3     |   p1  |
|____|_________|_______|

Мой запрос на получение данных из двух таблиц:

DB::table('paths')->join('stoppages', 'paths.id', '=', 'stoppages.path_id')->get()

Я хочу показать их на laravel блейд-странице в одной таблице. В настоящее время моя таблица выглядит следующим образом:

________________________________________
| source | destination |   stoppages   |
|________|_____________|_______________|
|   a    |     b       |       p1      |
|________|_____________|_______________|
|   a    |     b       |       p2      |
|________|_____________|_______________|
|   a    |     b       |       p3      |
|________|_____________|_______________|
|   a    |     c       |       p4      |
|________|_____________|_______________|
|   a    |     c       |       p5      |
|________|_____________|_______________|
|   d    |     e       |       p1      |
|________|_____________|_______________|

Но я хочу показать их в следующем формате?

________________________________________
| source | destination |   stoppages   |
|________|_____________|_______________|
|   a    |     b       |   p1, p2, p3  |
|________|_____________|_______________|
|   a    |     c       |     p4, p5    |
|________|_____________|_______________|
|   d    |     e       |       p1      |
|________|_____________|_______________|

Как показать эти данные в желаемом формате?

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Вместо использования построителя запросов используйте eloquent.

Path::with('stoppages')->get();

In Path. php Модель do:

public function stoppages()
{
    return $this->hasMany(Stoppage::class, 'path_id');
}

, где Path и Stoppage являются модели для дорожек и таблиц остановок соответственно.

1 голос
/ 13 марта 2020

Функция GROUP_CONCAT возвращает строковый результат с объединенными ненулевыми значениями из группы

. Вы можете использовать groupBy и group_concat следующим образом:

DB::table('paths')
  ->join('stoppages', 'paths.id', '=', 'stoppages.path_id')
  ->groupBy('source', 'destination')
  ->select('source', 'destination', DB::raw('GROUP_CONCAT(stoppages separator ", ") AS stoppages'))
  ->get()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...