簡體   English   中英

Laravel Eloquent ORM關系命名約定

[英]Laravel Eloquent ORM relationship naming conventions

在Eloquent中定義反向關系時,是否必須將動態屬性命名為與相關模型相同?

class Book extends Eloquent {

    public function author()
    {
        return $this->belongsTo('Author');
    }

}

$books = Book::all()
foreach ($books as $book) {
    echo $book->author->firstname;
}

在上面的示例中,我是否必須調用此方法作者,還是可以將其命名為其他內容? 我試圖將其命名為其他東西(只是出於好奇),但它然后返回null,因此錯誤“試圖獲取非對象的屬性”。

編輯:我通過將外鍵傳遞給belongsTo來實現它,如下所示:

class Book擴展了Eloquent {

    public function daauthor()
    {
        return $this->belongsTo('Author', 'author_id');
    }

}

$book = Book::find(55);
dd($book->daauthor);

有人可以解釋原因嗎?

方法belongsTo嘗試確定鏈接到Author模型的屬性。 為實現此目的,Laravel使用調用者的函數名稱。

因此,在您的代碼中,Laravel會看到daauthor函數並嘗試使用books表中的屬性daauthor_id來完全滿足您的請求。 由於您的圖書表沒有此屬性,因此失敗。

通過在方法上設置$ foreignKey,您可以覆蓋默認行為:

public function daauthor()
{
    return $this->belongsTo('Author', 'author_id');
}

有關更多詳細信息,請查看\\ Illuminate \\ Database \\ Eloquent \\ Model的源代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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