簡體   English   中英

如何在 Doctrine 2 中使用多對一關聯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM