2015-09-23 85 views
1

当我尝试检索我的双向关系的多方时,我总是收到null结果。OneToMany与Symfony2和Doctrine的关系

我的工具实体,我有

public function __construct() 
{ 
    $this->instances = new ArrayCollection; 
} 


/** 
* @var integer 
*/ 
private $toolId; 


/* @var ArrayCollection things 
* 
* @ORM\OneToMany(targetEntity="Instance", mappedBy="tool") 
*/ 
private $instances; 




public function getInstances(){ 
    print "In the get"; 
    var_dump($this->instances); 
    return $this->instances; 
} 

然后在另一边,我有

class Instance { 
/** 
* @var integer 
*/ 
private $instanceId; 

/** 
* @var string 
*/ 
private $serialnumber; 

/** 
* @var boolean 
*/ 
private $inServiceFlag = '1'; 

/** 
* @ORM\ManyToOne(targetEntity="Tool", inversedBy="instances") 
* @ORM\JoinColumn(name="tool_id", referencedColumnName="tool_id") 
*/ 
private $tool; 

当我看到一个例子,我可以看到该工具,但是当我查看工具我可以看到一个实例的数组。我总是得到一个空值。

我错过了什么?

回答

0

您确定您的@JoinColumn注释是正确的吗?

在注解,我看到referencedColumnName="tool_id",但对你的工具的实体,我看到了(当然假设这些实体都在同一个命名空间)private $toolId;

其他的一切看起来正确的我,根据the docs

+0

我相信referencedColumnName必须与表列名称匹配,即tool_id。 private $ toolId是实体名称。我需要把我自己的逻辑放在函数getInstances中吗?我认为教义应该自动获得相关项目。 –

+0

这不应该是必要的,你认为教义应该填补你的空白。一个简单的方法来检查你的'@ JoinColumn'注解不是导致问题的一个方法,那就是确保你的Tool实体有一个私钥(如果你还没有一个,就添加一个'@ Id'注释),并删除你的@ JoinColumn'注释 - Doctrine应该根据你的'@ ManyToOne'注释猜测一些合理的默认值。 (另见:http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#annref-joincolumn) –