我在使用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--
}
有什么想法吗?我有点难过这个。
答案 0 :(得分:2)
管理从Symfony IRC频道的memoryleak获得答案。在这种情况下,在注释上设置fetch属性,例如;
class Capacity {
/**
* @OneToOne(targetEntity="Package", inversedBy="Capacity", fetch="EAGER")
* @JoinColumn(name="PackageId", referencedColumnName="Id")
*/
protected $Package;
--SNIP--
}