You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:06:04