需要在Symfony2中使用Doctrine在多种情况下在延迟加载的对象上手动运行__load

时间:2014-03-25 15:38:32

标签: symfony doctrine-orm doctrine

我有一个包含三个实体的设置,正如您在下面的模式中所看到的,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();
        }
    }
}

这种预期的行为是基于我正在做的事情吗?谁能说出问题是什么?非常感谢 -

0 个答案:

没有答案