Symfony Sonata Admin区块筛选器添加条件及年份过滤技术问询
关于Sonata Admin区块筛选条件的解决方案
嘿,这俩Sonata Admin的问题我很熟悉,给你详细拆解下:
1. 如何在Symfony的Sonata Admin区块筛选器中添加条件?
核心是利用Sonata区块配置里的自定义查询逻辑,不同类型的区块配置方式略有区别,但通用思路是:
- 对于统计类区块(比如
sonata.admin.block.stats),可以在settings下添加query参数,用DQL语句直接指定筛选条件; - 对于列表类区块,可通过配置
filters或者在Admin类的createQuery方法里扩展筛选规则; - 本质都是通过Doctrine的查询构建器或DQL来限定要统计/展示的数据范围。
2. 针对datetime类型created字段,添加年份大于2018的筛选条件
针对你给出的sonata_admin.yml配置片段,只需要在settings里新增query参数,用DQL筛选created字段的年份即可。这里有两种常用写法:
写法一:直接比较日期边界
sonata_admin: dashboard: blocks: - class: col-lg-3 col-xs-6 # twitter bootstrap responsive code position: top # zone in the dashboard type: sonata.admin.block.stats # block id settings: code: sonata.page.admin.page # admin code - service id icon: fa-magic # font awesome icon text: Edited Pages color: bg-yellow # colors: bg-green, bg-blue, bg-yellow, bg-red etc. # 筛选created时间在2019年及以后的数据 query: "e.created > '2018-12-31 23:59:59'"
写法二:用Doctrine的YEAR函数(更直观)
sonata_admin: dashboard: blocks: - class: col-lg-3 col-xs-6 # twitter bootstrap responsive code position: top # zone in the dashboard type: sonata.admin.block.stats # block id settings: code: sonata.page.admin.page # admin code - service id icon: fa-magic # font awesome icon text: Edited Pages color: bg-yellow # colors: bg-green, bg-blue, bg-yellow, bg-red etc. # 直接提取created字段的年份进行比较 query: "YEAR(e.created) > 2018"
注意:这里的
e是Sonata默认使用的实体别名,如果你的Admin类自定义了查询别名,需要替换成对应的别名哦。
内容的提问来源于stack exchange,提问作者Bhavin Thummar
相关产品推荐
相关产品推荐

