我在Zend用的是原则2。
我试图弄清楚如何从当前对象访问相关模型的属性/方法。
例如,我们有两张桌子:学校和学生。
许多学生属于一所学校,所以这是一个多到一个关系,我只想列出每个学校的所有学生。我不想查询学生的记录,以找到他们所属的学校的细节,因此,这是一个unidirectional关系。
现在,要在Doctrine 2中在表之间设置多到一个关系,我需要将其添加到side实体中,因为它是拥有的side
/**
* @ManyToOne(targetEntity="Schools")
* @JoinColumn(name="school_id", referencedColumnName="school_id")
*/
private $schoolId;其中,名称值分别对应于“学生”表和“学校”表中的列名。
那么,如果我有一个对象的学校记录,我如何访问学生的属性/方法?
echo $oSchool->Students->getName(); // doesn't work我不明白我做错了什么,代理类正在生成。如果有人能给我指明正确的方向,我会很感激的。
发布于 2011-07-19 12:34:02
在学校实体里,你会想要这样的东西
/**
* @param \Doctrine\Common\Collections\Collection $property
* @OneToMany(targetEntity="Students", mappedBy="school")
*/
private $student;
public function __construct() {
$this->student = new \Doctrine\Common\Collections\ArrayCollection();
}
public function getStudent() {
return $this->student;
}使用此方法,您可以执行如下操作,这将为您提供一个包含所有学生对象的ArrayCollection
$studentsArray = $school->getStudent();希望能帮上忙..。杜格拉底2非常强大,但有些东西并没有很好地记录下来。有关这一点的更多信息,请参见使用汇编语言的文档。
发布于 2014-07-14 09:42:10
对于那些面临此问题的人:“致命错误:调用第168行C:\xampplite\htdocs\test\library\Doctrine\ORM\PersistentCollection.php中的非对象上的成员函数setValue() -”
解决方案:需要用原则属性值取代mappedBy值,而不是表列名
例如:
正确语法:@ORM\OneToMany(targetEntity="Test\Entity\School",mappedBy=“学校”)
错误语法:@ORM\OneToMany(targetEntity="Test\Entity\School", mappedBy="school_id")
发布于 2011-07-19 10:51:33
我已经取得了一些进展。我阅读了Doctrine2文档中的“使用对象”部分。
相关对象可以通过这样的方式访问(根据我在问题中给出的示例):
$oStudent->getSchoolId()->getName(); // gets a student's school's name by traversing the school class然而,在我最初的问题中,我想通过学校的对象访问属于一所学校的学生。我完全不知道该怎么做,在我看来这是不可能的。
https://stackoverflow.com/questions/6735635
复制相似问题