0

在 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将是完美的。

4

0 回答 0