Laravel查询生成器分组错误:SELECT列表的表达式#1不在GROUP BY子句中,并且包含未聚合的列

时间:2018-08-30 15:31:18

标签: mysql laravel eloquent query-builder laravel-query-builder

我正在建立一个论坛。我有两个模型:线程和报告。

一个线程可以由不同的用户多次报告。

我正在处理一个页面,以显示已报告给主持人的线程。

现在的问题是,我将按线程对报告进行分组,以便显示单个线程已被报告多少次,如果已多次报告同一线程,则不会多次显示。

报告表:

$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 :(得分:1)

我会这样:

第一: 在线程模型中创建这样的关系:

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

秒:

    控制器中的
  • 将获取具有至少一个带有报告计数的报告的所有线程,如下所示:
  

$ threads = Thread :: has('reports')-> withCount('reports')-> get()

  • 在视图中,您可以像这样打印出来
  

@foreach($ threads as $ thread)
  {{$ thread-> id。 ' 已 ' 。 $ thread-> reports_count。 '报告'}}
  @endforeach

答案 1 :(得分:0)

也许可行:

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