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