在 Sylius 中,可翻译实体使用 anArrayCollection来处理翻译,例如实体在属性中Product具有实体。ProductTranslationtranslations
给定数据库中一个已经水合的实体$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将是完美的。