Shopware 6 带附加字段的多对多关联查询过滤问题
Shopware 6 多对多关联中间表字段过滤解决方案
错误原因
你遇到的报错是因为active字段是多对多中间表CompanyUser的属性,而非User实体的属性,直接使用users.active路径访问时,DAL无法在User实体中找到对应字段,因此抛出未映射字段异常。
正确实现代码
Shopware 6 的DAL为所有多对多关联默认提供了mapping路径,可直接指向中间表访问其字段,你可以按如下方式编写查询逻辑:
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria; use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter; // 替换为你实际获取的当前登录用户ID $currentUserId = $this->getCurrentUserId(); $criteria = new Criteria(); $criteria->addFilter( // 过滤关联的用户ID为当前登录用户 new EqualsFilter('users.mapping.userId', $currentUserId), // 过滤中间表关联状态为生效 new EqualsFilter('users.mapping.active', 1) ); $companies = $this->companyRepository->search($criteria, $context);
补充说明
- 路径中的
users对应你在CompanyDefinition中定义的多对多关联的属性名 - 路径后的
userId、active需要和CompanyUserDefinition中定义的属性名保持一致,无需使用数据库物理字段名 - 如果你不需要在返回的公司数据中携带关联的用户信息,可省略
addAssociation('users')调用,过滤逻辑不需要提前加载关联数据
内容的提问来源于stack exchange,提问作者P.N.
相关产品推荐
相关产品推荐

