Shopware 6 DAL如何比较订单的两个字段属性值?
在Shopware 6 Data Abstraction Layer中实现实体字段间的比较
你用EqualsFilter出错是因为这个过滤器本来就是用来字段和固定值比较的,第二个参数会被当作字符串值传入,所以数据库会把createdAt当成字符串去匹配updatedAt的datetime值,自然报格式错误。
要实现字段与字段之间的比较,得用Shopware 6专门提供的ComparisonFilter,它支持直接指定两个字段路径进行对比。
具体实现步骤:
- 引入对应的过滤器类:
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\ComparisonFilter;
- 创建字段比较的过滤器实例:
// 用OPERATOR_EQ表示两个字段值相等 $fieldComparisonFilter = new ComparisonFilter( ComparisonFilter::OPERATOR_EQ, 'createdAt', 'updatedAt' );
- 将过滤器添加到查询条件中并执行搜索:
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria; $criteria = new Criteria(); $criteria->addFilter($fieldComparisonFilter); // 调用订单仓库执行查询 $orders = $this->orderRepository->search($criteria, $context)->getEntities();
这个过滤器还支持其他比较操作符,比如OPERATOR_GT(大于)、OPERATOR_LT(小于)等,按需替换第一个参数即可。
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

