2015-12-26 116 views
1

我有以下模式:如何在Laravel 5中爲這種關係創建模型?

Modules 
======= 
id: PK 
current_revision: FK to Revisions.Id, nullable 

Revisions 
========= 
id: PK 

current_revision領域的一個版本ID或者引用或設置爲null。

我的問題是我如何在Laravel中正確建模這種關係。

以下是我做到了到目前爲止:

class Module extends Model 
{ 
    public function current_revision() 
    { 
     return $this->belongsTo(Revision::class, 'current_revision'); 
    } 

} 

但是,我沒有做反向的revision模型,因爲可能存在沒有module分配給它的修訂。

這是模擬這種關係的正確方法嗎?

此外,爲什麼以下$module->current_revision不輸出修訂集合?而是輸出該字段的內容。

然而值得一提的以下工作正常:$module->current_revision()->getResults()

回答

1

關於當前的關係:

由於current_revision僅指向一個在修訂表的記錄,你可以期望你的關係返回單個修訂模式,而不是一個集合。

您獲取字段內容而不是模型的原因是您的字段和關係共享相同的名稱。因此,當您詢問$model->current_revision時,Laravel會爲您提供數據庫中該字段的值。

解決此問題的最簡單方法是重命名數據庫列或關係名稱。我通常將_id追加到外鍵列,這從來都不是問題。

關於反比關係:

您可以定義的關係同樣的方式,即使列可以爲空。如果沒有任何與一個修訂相關的模塊,則$revision->module(例如)將僅返回null。

+1

非常感謝。出於某種原因,我認爲Laravel會讀取方法名稱或其他內容。感謝您清除混淆! –