2017-08-23 113 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