如何在已水合实体的集合中添加项目

问题描述

在 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 (将#修改为@)