我在建一个论坛。我有两个模型:线程和报表。
不同的用户可以多次报告一个线程。
我在一个页面上显示已报告给版主的线程。
现在的问题是,我将按线程对报告进行分组,这样就可以显示单个线程被报告了多少次,而如果同一个线程被报告了多次,它就不会出现多次。
报告表:
$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条答案
按热度按时间mbyulnm01#
我会这样做:
首先:在线程模型中创建如下关系:
第二:
在中,控制器将获取至少具有一个报告且报告计数的所有线程,如下所示:
$threads=thread::has('reports')->withcount('reports')->get()
在视图中你可以这样打印出来
@foreach($threads作为$thread)
{{$thread->id.'有'$线程->报告计数报告'}}
@endforeach公司
juud5qan2#
也许这样行得通: