我正在建立一个论坛。我有两个模型:线程和报告。
一个线程可以由不同的用户多次报告。
我正在处理一个页面,以显示已报告给主持人的线程。
现在的问题是,我将按线程对报告进行分组,以便显示单个线程已被报告多少次,如果已多次报告同一线程,则不会多次显示。
报告表:
$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`)
有任何想法如何解决此问题或以其他方式处理它?谢谢!
答案 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');