2017-06-20 29 views
5

我正在擴展模型的網站上工作,例如。Laravel與擴展模型的雄辯關係

class Asset extends Model { 

    public function project() { 
    return $this->belongsTo(Project::class); 
    } 
} 

class Video extends Asset { 

} 

我需要建立與擴展類相同belongsTo雄辯的關係,或通過具有它的父類的,會Laravel做休息?

此外,是否有任何文檔詳細介紹如何構建這種關係(即在控制器方面)?我在Laracasts的網站上找不到任何東西。

+1

如果您不重寫項目,那麼它將按原樣從父項繼承。 – apokryfos

+0

看看這篇文章:https://stackoverflow.com/questions/4961906/when-to-implement-and-extend –

回答

2

您不需要實例化擴展方法兩次,除非您想用不同的行爲覆蓋它。

我個人在我的應用程序中使用了很多繼承,它的工作方式與您所期望的一樣,每個關係都使用父級默認值或您聲明的特定受保護變量繼續工作和查詢。例如,如果聲明受保護的$table = 'foo',那麼子項也將接受該變量以執行其查詢,或者您可以在子項上覆蓋該子項以從父項查詢不同的表。

在文檔方面,你沒有找到很多信息的原因我認爲這是因爲這是PHP和OOP問題,而不是框架特定的問題。

如果你想聲明多態性關係,這是實現您的SQL多重繼承一個非常常見的方式,Laravel有你的背部,具體Eloquent relationsmigration commands,像$table->morphs('asset');

希望這有助於你。