1

问题概要

我在使用 Doctrine2 在 Symfony2 中创建双向 OneToOne 关系时遇到了一些问题。我的数据库有两个我要关联的表,CrmCapacity 和 CrmPackages,CrmCapacity 有一个字段 PackageId,它与 CrmPackages 中的 Id 字段匹配。

我能够从包裹中获取容量,但似乎无法从容量中获取包裹,因为关系表明它是单向的而不是双向的。

以下是我的控制器中的代码,这可以很好地访问包中的容量。

$package = $this->getDoctrine()
            ->getRepository('LargeAzureBundle:Package')
            ->find('ID-HERE');

var_dump($package->getName());
var_dump($package->getCapacity()->getIsIncompleteReason());
die();

效果很好,但是以下内容为容量而不是包获取数据

$capacity = $this->getDoctrine()
    ->getRepository('LargeAzureBundle:Capacity')
    ->find('3FF564FC-5EA0-E211-B8AC-005056B70002');

var_dump($capacity->getIsIncompleteReason());
var_dump($capacity->getPackage()->getName());
die();

实体

以下是我的实体的注释

包裹

class Package {
    /**
     * @OneToOne(targetEntity="Capacity", mappedBy="Package")
     */
    protected $Capacity;

    --SNIP--
}

容量

class Capacity {
    /**
     * @OneToOne(targetEntity="Package", inversedBy="Capacity")
     * @JoinColumn(name="PackageId", referencedColumnName="Id")
     */
    protected $Package;

    --SNIP--
}

有任何想法吗?我对这个有点难过。

4

1 回答 1

2

设法从 Symfony IRC 频道上的 memoryleak 获得答案。例如,在这种情况下,在注释上设置 fetch 属性是可行的;

class Capacity {
    /**
     * @OneToOne(targetEntity="Package", inversedBy="Capacity", fetch="EAGER")
     * @JoinColumn(name="PackageId", referencedColumnName="Id")
     */
    protected $Package;

    --SNIP--
}
于 2013-10-08T12:25:58.580 回答