Symfony2中的双向OneToOne关系

时间:2013-10-08 09:36:05

标签: php symfony doctrine-orm entity-relationship

问题大纲

我在使用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而不是Package

提取数据
$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--
}

有什么想法吗?我有点难过这个。

1 个答案:

答案 0 :(得分:2)

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

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

    --SNIP--
}