我有一个包含三个实体的设置,正如您在下面的模式中所看到的,Person和Project通过Role以多对多关系连接。
问题出现在我写的一个函数中,它将获取与项目相关的人员以及与人员相关的项目。在这些情况下,我按照预期从教义中获取代理对象。但是,如果不对它们运行__load,我将无法访问这些对象的属性。
以下是架构的一部分:
class Person{
/**
* @ORM\OneToMany(targetEntity="Role", mappedBy="project")
*/
protected $roles;
}
class Project{
/**
* @ORM\OneToMany(targetEntity="Role", mappedBy="person")
*/
protected $roles;
}
class Role{
/**
* @ORM\ManyToOne(targetEntity="Person", inversedBy="roles")
* @ORM\JoinColumn(name="personId", referencedColumnName="id")
*/
protected $person;
/**
* @ORM\ManyToOne(targetEntity="Project", inversedBy="roles")
* @ORM\JoinColumn(name="projectId", referencedColumnName="id")
*
*/
protected $production;
}
这里有一些代码可以让所有人都参与到一个项目中
class Project{
public function getPeople(){
$roles = $this->getRoles();
$people = new \Doctrine\Common\Collections\ArrayCollection();
foreach($roles as $role){
$person = $role->getPerson();
$people->add($person);
}
return $people;
}
}
现在,这是我遇到意外行为的地方。以下代码将不会回应:
class Project{
public function getPeoplesNames(){
foreach($this->getPeople() as $person){
echo $person->getName();
}
}
}
但是这段代码会像预期的那样回显名称
class Project{
public function getPeoplesNames(){
foreach($this->getPeople() as $person){
$person->__load();
echo $person->getName();
}
}
}
这种预期的行为是基于我正在做的事情吗?谁能说出问题是什么?非常感谢 -