Laravel - невозможно присоединить таблицу в запросе - PullRequest
0 голосов
/ 07 мая 2018

Не знаю, почему в приведенном ниже запросе у меня нет данных из присоединяющейся таблицы:

DB::table('tags_ref')
        ->join('tags', 'tags_ref.tag_id', '=', 'tags.id')
        ->select(DB::raw('count(tag_id) as repetition, tag_id'))
        ->groupBy('tag_id')
        ->orderBy('repetition', 'desc')
        ->get();

Я получаю правильные результаты, но у меня нет данных из таблицы "тегов".

Мой результат:

[{"repetition":6,"tag_id":1},{"repetition":5,"tag_id":14},{"repetition":4,"tag_id":42},{"repetition":4,"tag_id":32},{"repetition":4,"tag_id":103},{"repetition":4,"tag_id":4},{"repetition":3,"tag_id":13},{"repetition":3,"tag_id":83},{"repetition":3,"tag_id":15},{"repetition":3,"tag_id":61},{"repetition":3,"tag_id":105},{"repetition":3,"tag_id":60}]

В результатах отсутствует "tags_name".

Мой вопрос заключается в том, как извлечь данные из присоединяющейся таблицы.

С уважением.

Обновленный запрос:

DB::table('tags_ref')
        ->join('tags', 'tags_ref.tag_id', '=', 'tags.id')
        ->select(DB::raw('count(tag_id) as repetition'), 'tags.*')
        ->groupBy('tag_id')
        ->orderBy('repetition', 'desc')
        ->get();

Ошибка в запросе:

SQLSTATE[42000]: Syntax error or access violation: 1055 'farmazon_lar.tags.id' isn't in GROUP BY (SQL: select count(tag_id) as repetition, `tags`.* from `tags_ref` inner join `tags` on `tags_ref`.`tag_id` = `tags`.`id` group by `tag_id` order by `repetition` desc)

Структура таблиц: tags_ref: id, post_id, tag_id теги: идентификатор, имя

Обновлен запрос:

DB::table('tags_ref')
        ->join('tags', 'tags_ref.tag_id', '=', 'tags.id')
        ->select(DB::raw('count(tag_id) as repetition'), 'tags.tag_name')
        ->groupBy('tag_id, tag_name')
        ->orderBy('repetition', 'desc')
        ->get();

Ошибка:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tags.tag_name' in 'field list' (SQL: select count(tag_id) as repetition, `tags`.`tag_name` from `tags_ref` inner join `tags` on `tags_ref`.`tag_id` = `tags`.`id` group by `tag_id,tag_name` order by `repetition` desc)

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Наконец-то я решил эту проблему. Это правильный запрос:

DB::table('tags_ref')
            ->join('tags', 'tags_ref.tag_id', '=', 'tags.id')
            ->select(DB::raw('count(tag_id) as repetition, tag_id'),DB::raw('tags.name'))
            ->groupBy('tag_id','tags.name')
            ->orderBy('repetition', 'desc')
            ->take(10)
            ->get();
0 голосов
/ 07 мая 2018

Чтобы получить столбец тегов, вам нужно добавить эти столбцы

  ->select(DB::raw('count(tag_id) as repetition'), 'tags.tag_name')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...