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

问题描述 投票:0回答:2

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

不同用户可以多次报告线程。

我正在一个页面上显示已向主持人报告的线程。

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

报告表:

$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`)

任何想法如何解决这个问题或以另一种方式处理它?谢谢!

mysql laravel eloquent query-builder laravel-query-builder
2个回答
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。 'report'}} @endforeach


0
投票

也许这有效:

Report::with('thread')
    ->get()
    ->groupBy('thread_id');
© www.soinside.com 2019 - 2024. All rights reserved.