laravel-admin使用filter过滤聚合字段
最近遇到一个需求,laravel admin的列表里面需要做统计查询
$grid = new Grid(new Attendancer());
$grid->model()->selectRaw('cur_room,count(*) as aggregate')->whereRaw('cur_room is not null && cur_room !=""')->groupBy("cur_room");
$grid->column('cur_room','房间号');
$grid->column('aggregate','人数');
return $grid;
以上代码执行之后效果如图
文章图片
然后接下来需要对这两列做数据过滤
$grid->filter(function (Grid\Filter $filter){
$filter->setFilterID("count");
$filter->disableIdFilter();
$filter->where(function ($query){
$query->having("aggregate",">=",$this->input);
},'人数');
$filter->equal('cur_room','房间号');
});
执行之后会发现,having那一行没用。文档里面filter也没有提到使用having的内容。那就只能自己来。
filter底层有一个方法是getColumn,可以返回该输入项的name。然后通过$_GET来获取传进来的参数。
此处有个事项需要注意,就是关于count(*)的名字问题,必须要用 aggregate 否则会提示查询sql时列名不存在,因为laravel-admin在执行这个方法的时候会带上开发者自己定义的where条件和聚合条件做一次统计查询
select count(*) as aggregate from `attendancer` where 你的查询条件 group by `聚合字段` having 你的字段名 >= 2
不改成count字段的名字不改成aggregate的话会在查询的时候提示 Column not found: 1054 Unknown column '你的字段名' in 'having clause'
完整代码如下
$grid = new Grid(new Attendancer());
$c='';
$grid->filter(function (Grid\Filter $filter)use(&$c){
$filter->setFilterID("count");
$filter->disableIdFilter();
$c=$filter->setName("c")->where(function ($query){
//$query->having("c",">=",$this->input);
return $this->input;
},'人数')->getColumn();
$filter->equal('cur_room','房间号');
});
$grid->model()->selectRaw('cur_room,count(*) as aggregate')->whereRaw('cur_room is not null && cur_room !=""')->groupBy("cur_room");
if(isset($_GET[$c])){
$grid->model()->havingRaw('aggregate >= ?',[$_GET[$c]]);
}
$grid->column('cur_room','房间号');
$grid->column('aggregate','人数');
$grid->disableActions();
$grid->disableCreateButton();
【laravel-admin使用filter过滤聚合字段】总体来说,这个解决方式还是有坑的,治标不治本。
推荐阅读
- 使用 Jetpack Compose 提升 Play 商店的用户体验
- gofs使用教程-基于golang的开源跨平台文件同步工具
- RenderDoc图形调试器详细使用教程(基于DirectX11)
- 【北亚数据库数据恢复】使用delete命令未添加where子句删除全表数据的Mysql数据库数据恢复
- Yii2.0 redis的配置和使用
- java|Java如何使用实时流式计算处理()
- Dockerfile 实战
- Vue指令02——v-on指令和v-show的使用
- 有礼品哦!全新界面工具包 Jetpack Compose 使用情况调研
- Java8新特性-使用Stream流递归实现遍历树形结构