问题描述
在 Sylius 中,可翻译实体使用 ArrayCollection
来处理翻译,例如 Product
实体在 ProductTranslation
属性中有 translations
个实体。
鉴于数据库中已经有一个水合实体 $object
,我们在 $object->translations
中有一个项目。
现在,我想从数据库中将另一个现有翻译添加到我的 $object
中。
$qb = $this->createqueryBuilder('o');
$qb
->addSelect('fallback_translation')
->innerJoin(
'o.translations','fallback_translation','WITH','fallback_translation.locale = :fallback_translation'
)
->setParameter('fallback_translation',$locale)
->where('o = :translatable')
->setParameter('translatable',$object)
;
/** @var TranslatableInterface $translation */
$translation = $qb->getQuery()->getSingleResult();
dump($object === $translation); // true
使用此代码,$translation
实体与集合中没有新区域设置的 $object
(相同对象引用)相同,我不明白为什么。我认为这与 Doctrine 的水合作用有关,但我不知道背后的逻辑。
我的查询没问题,因为如果我强制模式 AbstractQuery::HYdratE_ARRAY
,我的数组包含正确的数据。我真的需要一个水合对象,因此通过将新翻译添加到 $object
的集合来更新现有实体将是完美的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)