[英]How to use many to one associations in Doctrine 2
我在 Zend 中使用 Doctrine 2 。
我試圖弄清楚如何從當前的 object 訪問相關模型的屬性/方法。
例如,我們有兩個表:Schools 和 Student。
許多學生屬於一所學校,所以這是多對一的關系,我只想列出每所學校的所有學生。 我不希望查詢學生記錄以查找他們所屬學校的詳細信息,因此這被歸類為單向關系。
現在要在表之間的 Doctrine 2 中設置多對一關系,我將其添加到學生實體中,因為它是擁有方:
/**
* @ManyToOne(targetEntity="Schools")
* @JoinColumn(name="school_id", referencedColumnName="school_id")
*/
private $schoolId;
其中名稱值分別對應學生表和學校表中的列名。
因此,如果我有一個學校記錄的 object,我如何訪問學生屬性/方法?
echo $oSchool->Students->getName(); // doesn't work
我不明白我做錯了什么,正在生成代理 class。 如果有人能指出我正確的方向,我將不勝感激。
在 Schools 實體中,您希望擁有這樣的東西
/**
* @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();
希望有幫助... Docrine 2 非常強大,但有些東西沒有很好地記錄。 使用 Assiciations的文檔中有關此的更多信息。
For those who are facing this issue: "Fatal error: Call to a member function setValue() on a non-object in C:\xampplite\htdocs\test\library\Doctrine\ORM\PersistentCollection.php on line 168 –"
解決方案:需要將 mappedBy 值替換為 doctrine 屬性值而不是 Table 列名
前任:
正確的語法: @ORM\OneToMany(targetEntity="Test\Entity\School", mappedBy="school")
錯誤的語法:正確的語法:@ORM\OneToMany(targetEntity="Test\Entity\School", mappedBy="school_id")
我已經取得了一些進展。 我閱讀了 Doctrine 2 文檔的“ 使用對象”部分。
可以通過這樣的方式訪問關聯的對象(根據我的問題中給出的示例):
$oStudent->getSchoolId()->getName(); // gets a student's school's name by traversing the school class
但是,在我的原始問題中,我想通過學校 object 訪問屬於學校的學生。 我完全不知道如何做到這一點,在我看來這是不可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.