在 Sylius 中,可翻译实体使用 anArrayCollection
来处理翻译,例如实体在属性中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 的水合作用有关,但我不知道背后的逻辑。
我的查询没问题,因为如果我强制 mode AbstractQuery::HYDRATE_ARRAY
,我的数组包含正确的数据。我确实需要一个水合对象,因此通过将新翻译添加到集合来更新现有实体$object
将是完美的。