业务需要做一个待办事件功能,其中主办人是单个,协作人是多个;
然后做了两个表,附表用来存协作人,与主表之间是一对多的关系,
列表显示需要全部数据采用了左连接查询。Left Join 求两个表的交集外加左表剩下的数据。
结果呢,如果协作人是1个的时候没问题,当为多个时,就会出现多条重复数据。
一开始直接采用 group by,这当然可以去重,
不过laravel中封装的count方法 直接取了结果中的第一个数据,
也就是5,实际结果我要的是6,如图:

这样列表显示是没问题,但是计数是不对的。
Laravel中还封装了一个过滤方法
/**
* 强制查询仅返回不同的结果。
*
* @return $this
*/
public function distinct()
{
$columns = func_get_args();
if (count($columns) > 0) {
$this->distinct = is_array($columns[0]) || is_bool($columns[0]) ? $columns[0] : $columns;
} else {
$this->distinct = true;
}
return $this;
}
使用方法:
$total = $conn->distinct('id')->count();
实际上它使用的是Mysql 的 distinct关键字来过滤重复

这样就过滤掉重复的数据了,计数也就准确了。
这篇博客讨论了在 Laravel 应用中实现待办事件功能时遇到的问题,其中主办人是单一的,而协作人可以是多个。通过创建两个表来存储数据,主表和附表之间形成了一对多的关系。在使用 LeftJoin 查询获取所有数据时,当协作人数量超过一个时,出现了重复数据。作者尝试使用 groupby 进行去重,但 Laravel 的 count 方法只返回了第一条数据的计数,导致计数不准确。为了解决这个问题,作者发现 Laravel 的 distinct 方法可以有效过滤重复数据,并确保计数正确。博客中还展示了如何在 Laravel 中使用 distinct 方法来优化查询。
437





