Не удалось получить результат с помощью построителя запросов laravel для объединения двух таблиц - PullRequest
1 голос
/ 16 января 2020

У меня есть две таблицы ' пользователи ' и ' канал '

Таблица: пользователи

id  name        channel
1   user1       1,2,3
2   user2       2,3
3   user3       2

Таблица: канал

id   channel_name
1    IT
2    CS
3    EC

Мне нужен результат как

name     channel_name
user1    IT,CS,EC
user2    CS,EC
user3    CS

Использование laravel построителя запросов, как я пишу запрос?

Я попробовал ниже, но я получил имя_канала как NULL .

попробовать 1

$UserChannelList = Users::select('users.name as username', DB::raw("(GROUP_CONCAT(channels.channel_name SEPARATOR ',')) as 'channel_name'"))
        ->leftjoin('channels', function ($join) {
          $join->whereRaw("FIND_IN_SET('channels.id', 'users.channel')");
        })
        ->groupBy('users.name')
        ->orderBy('users.name', 'ASC')
        ->get();

попробовать 2

$UserChannelList = Users::select('users.name as username', DB::raw("(GROUP_CONCAT(channel.channel_name SEPARATOR ',')) as 'channel_name'"))
        ->leftjoin('channel', function ($join) {
          $join->on(DB::raw("CONCAT(',', 'users.channel', ',')"), 'like', DB::raw("CONCAT(',','channel.id',',')"));
        })
        ->groupBy('users.name')
        ->orderBy('users.name', 'ASC')
        ->get();

Ответы [ 2 ]

1 голос
/ 16 января 2020

Попробуйте с этим запросом.

\DB::table("users")
        ->select("users.*",\DB::raw("GROUP_CONCAT(channels.channel_name) as channel_name"))
        ->leftjoin("channels",\DB::raw("FIND_IN_SET(channels.id,users.channel)"),">",\DB::raw("'0'"))
        ->get();

Пожалуйста, отметьте мой ответ

0 голосов
/ 16 января 2020

Вот ваше решение, пожалуйста, проверьте

    $UserChannelList = DB::table('users')
                        ->select('users.name', DB::raw("(GROUP_CONCAT(channels.channel_name)) as 'channel_name'"))
                        ->rightJoin('channels', function($join){
                            $join->whereRaw('FIND_IN_SET(channels.id, users.channel)');
                        })
                        ->groupBy('users.name')
                        ->orderBy('users.name', 'ASC')
                        ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...