2017-08-23 111 views
1

我是Laravel雄辯的處理模型的新手段。如何正確地擴展Laravel模型?

我需要創建一個具有一些常見屬性和關係的基類Product類以及其他一些不具有共同屬性的其他類。

我會盡力做一個簡單的例子:所有產品都具有一個「SERIAL_NUMBER」,一個「ship_date」等等

但只有瓶子和燈泡類有一個「glass_type」功能,而主席班有另一個。

我做一些

abstract class Product extends Model {} 
    class Bottle extends Product {} 

,但我認爲這樣的產品沒有任何附加的數據庫$表,我不知道如何處理的遷移表,背後的邏輯。

這裏應用的最佳方法是什麼?

預先感謝您

+0

,你可以用它代替抽象之類的東西,對於遷移重複剛纔的COMMUN列簡單的特質,但如果你有很多共同的列一下Laravel多態的關係,看看這個例如:https://laravel.com/docs/5.4/eloquent-relationships#polymor phios-relations – yoeunes

回答

-1

通過在產品模型所需的所有領域我們已經部分地「解決」了這一點。另外我們引入了一個Type字段(「glass」,「Chair」)並創建了不同的getter方法。

除此之外,你可以使用這裏所描述的更優雅的方法,一個店每種類型在一個單獨的表:Extending Eloquent Models in Laravel (use different tables)

+0

謝謝您的回答,您是如何組織模型邏輯的? – Carondimonio

+0

對不起,遲到的答案。您可以將模型中的邏輯放在開頭。但我建議使用你自己的類作爲主要部分。這是你一直在尋找的? – Fabio

0

在模型中添加的表名(擴展了基礎模型子之一),
顯式例如:

class SomeChildModel extends BaseModel { 

    // Manually set the table name 
    protected $table = 'table_name'; 

} 
+0

只記得通過這樣做父類'BaseModel'中的'$ table'屬性也會被修改。 –

+0

Hi Kuldeep,通過這樣做,我們指定了'SomeChildModel'表(當然是改變'BaseModel'本身的表格。在我的理解中,我們必須將'SomeChildModel'的所有屬性存儲在'$ table'中,即使是常見的)我想要一個'base_model'表,我們擁有所有的id和公共屬性,然後在'SomeChildModel'表中引用'BaseModel' id並存儲其他屬性,我認爲它更多這樣邏輯,也許我錯了,我不知道 – Carondimonio