如何查询继承主产品自定义字段的产品变体实体?
解决变体产品继承主产品自定义字段的查询问题
问题说明
主产品配置了自定义字段,其下的变体本该继承这些字段值,但当前查询变体实体时,自定义字段返回为空。
当前代码的问题
现有代码仅筛选出带父产品的变体,但未关联查询主产品的自定义字段,因此无法获取继承的值:
$criteria = (new Criteria()); $criteria->addFilter(new NotFilter(NotFilter::CONNECTION_OR, [new EqualsFilter('parentId', null)])); $product = $this->productRepository->search( $criteria, Context::createDefaultContext() )->getEntities()->first(); var_dump($product->getCustomFields()) ;// 空值,未获取到主产品的继承字段
解决方案
需要在查询中关联主产品并加载其自定义字段,之后通过变体关联的主产品对象获取继承值即可。
具体实现代码
$criteria = new Criteria(); // 筛选出所有变体产品 $criteria->addFilter(new NotFilter(NotFilter::CONNECTION_OR, [new EqualsFilter('parentId', null)])); // 关联主产品,并同时加载主产品的自定义字段 $criteria->addAssociation('parent'); $criteria->addAssociation('parent.customFields'); $product = $this->productRepository->search( $criteria, Context::createDefaultContext() )->getEntities()->first(); // 从关联的主产品中获取继承的自定义字段 $inheritedCustomFields = $product->getParent()->getCustomFields(); var_dump($inheritedCustomFields);
关键说明
- Shopware不会自动将主产品的自定义字段合并到变体实体中,必须主动通过关联查询加载主产品的字段
- 使用
addAssociation('parent.customFields')可以一次性加载主产品的自定义字段,避免后续触发额外查询
内容的提问来源于stack exchange,提问作者matzmu
相关产品推荐
相关产品推荐

