在Laravel中扩展雄辩的模型(使用不同的表)

在Laravel中扩展雄辩的模型(使用不同的表),laravel,inheritance,eloquent,models,Laravel,Inheritance,Eloquent,Models,我正在构建一个Laravel应用程序,它涉及跟踪不同类型的潜在客户。例如,有再融资线索和购买线索 由于Lead共享很多信息和功能,但不是全部,我的想法是创建一个Lead类,扩展Laravel的模型类,然后创建一个RefiniteLead类,扩展Lead类 所以我会: class Lead extends Model { // shared lead stuff } class RefinanceLead extends Lead { // stuff specific to r

我正在构建一个Laravel应用程序,它涉及跟踪不同类型的潜在客户。例如,有再融资线索购买线索

由于Lead共享很多信息和功能,但不是全部,我的想法是创建一个
Lead
类,扩展Laravel的
模型
类,然后创建一个
RefiniteLead
类,扩展
Lead

所以我会:

class Lead extends Model
{
    // shared lead stuff
}

class RefinanceLead extends Lead
{
    // stuff specific to refinance leads
}
我的问题是:

  • 这个策略有意义吗
  • 如果是这样的话,雄辩公司将如何处理这些数据?我会有一个
    潜在客户
    表和一个
    再融资\u潜在客户
    表吗
  • RequiredElead类的新实例是否会利用
    leads
    表中的任何内容

  • 我在通过文档回答这个问题时遇到困难,但是如果我错过了解释的地方,请让我知道。谢谢。

    1。是的,在父模型中拥有所有通用功能非常有意义

    2.基本上,每个雄辩的模型都将处理
    protected$table
    变量中定义的自己的表中的数据。可以重写父变量,为所有不同的子模型设置单独的表

    例如,如果您对RefurtElead实例使用
    getId()
    方法,它将从RefurtElead表返回id。如果在PurchadeLead实例上使用它,它将从purchade_表中重新生成id

    3.我不知道您的确切需求是什么,但一般来说,我建议将Lead类抽象化,这样您就不会为它关联一个表。仅用于分离常见功能、关系等。。。 当然,正如评论中所建议的,实现一个接口总是一个好主意

    abstract class Lead extends Model implements LeadContract
    {
       // class body
    }
    

    你应该考虑读书。首先为每种类型的潜在客户规划接口。你可能会发现建立特性比扩展特性更好,这样它们就可以解耦了?谢谢伊万诺夫-这真的很有帮助!快速跟进(这将有望保持在原来的范围内):我们希望在所有潜在客户类型中都有一个唯一的标识符;通用的“潜在客户id”。你对如何解决这个问题有什么建议吗?如果Solar Lead和Refurce Lead有正常的、独立的表,那么显然标准id字段将重叠。我正在尝试学习Laravel,因此如果我的问题很愚蠢,我很抱歉,但是如果您想获取所有Lead,我们可以使用Leads::all()并一起检索所有Refurceleads和PurchaseLead吗?我怀疑我说的是愚蠢的,因为数据存储在两个不同的表中。那怎么可能呢?假设我们有一个产品模型,然后用ComputerProduct和CarProduct对其进行扩展,有没有一种方法可以在不查询两个表的情况下获得所有产品?嗨,这是一个非常棒的答案。在身份验证保护中使用用户时,我可以创建用户的抽象类和契约吗?像Coach extend用户实现UserContract和两个或三个以上的模型?没有实现不同的保护和保留默认身份验证?
    abstract class Lead extends Model implements LeadContract
    {
       // class body
    }