0

摘要:当它们包含在实体中时,Doctrine Embedded 类型无法填充,而这些实体本身又包含在另一个顶级实体中。

详细信息:我有一个顶级实体A,它与一个中间级实体有ManyToOne关系,而中间级实体B又具有一个 Embedded 对象C

当我检索顶级实体(使用$entityManager->getRepository(A::class)->find($aid))时,返回的 A 对象的$b变量将其$c属性显式设置为 null (而不是 - 如您所料 - 完全不存在)。查询$c属性不会导致B水合 - 相反 $c 保持为空。

如果我首先进行虚拟调用以获得Beg的简单属性reference,则可以B正确补水并正确$c填充。

同样,如果我进入中级水平,$entityManager->getRepository(B::class)->find($bid)那么也没有问题。

这是教义的限制吗?

(一个可能的复杂因素是 A 本身是另外两个实体的基类)

/**
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="type", type="string")
 * @DiscriminatorMap({"child1" = "Child1 "child2" = "Child2"})
 * @Table(name="A")
 */
class A
{
    /**
     * @ManyToOne(targetEntity="Model\B", inversedBy="As")
     * @JoinColumn(name="b_id", referencedColumnName="id",)
     * @var B
     */
    public $b;
}

/**
 * @Entity
 * @Table(name="b")
 */
class B
{
    /**
     * @Embedded(class="Model\C", columnPrefix = false)
     * @var C
     */
    public $c;

    /**
     * @Column(type="string")
     * @var string
     */
    public $reference;
}

/**
 * @Embeddable
 */
class C
{
    /**
     * @Column(type="smallint")
     * @var int
     */
    public $type;   
}
4

0 回答 0