Группа построителя запросов Laravel по ошибке: Выражение №1 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец - PullRequest
0 голосов
/ 30 августа 2018

Я строю форум. У меня есть две модели: Тема и Отчет.

Разные пользователи могут пожаловаться на поток несколько раз.

Я работаю над страницей для отображения тем, о которых сообщили модераторы.

Теперь проблема заключается в том, что я бы сгруппировал отчеты по потокам, чтобы он показывал, сколько раз сообщалось об одном потоке, и один и тот же поток не появляется несколько раз, если о нем сообщалось несколько раз.

Таблица отчетов:

$table->increments('id');
$table->unsignedInteger('thread_id');

Таблица потоков:

$table->increments('id');
$table->string('title', 500);

Отчеты о взаимоотношениях -> Темы

 public function thread() {
    return $this->hasOne(Thread::class, 'id');
 }

Итак, я делаю это:

Report::with('thread')
        ->groupBy('thread_id')
        ->get();

Однако я получаю эту ошибку:

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'reports.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select * from `reports` group by `thread_id`)

Есть идеи, как это исправить или подойти к нему по-другому? Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Я бы сделал это так:

первый: создать отношение в модели потока, как это:

public function reports() {
    return $this->hasMany(Report::class);
}

второй:

  • в контроллере получат все потоки, у которых есть хотя бы один отчет с количеством отчетов, например:

$ threads = Thread :: has ('отчеты') -> withCount ('отчеты') -> get ()

  • в виде вы можете распечатать его как это

@ foreach ($ threads как $ thread)
{{$ thread-> id. «имеет». $ thread-> reports_count. 'report'}}
@ Endforeach

0 голосов
/ 30 августа 2018

Может быть, это работает:

Report::with('thread')
    ->get()
    ->groupBy('thread_id');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...