【问题标题】:Laravel Eloquent - Multiple models for one tableLaravel Eloquent - 一张桌子的多个模型
【发布时间】:2018-03-01 20:08:01
【问题描述】:

我有 3 个雄辩的模型,它们几乎相同并且代表折扣:

  • 绝对折扣
  • OneProductForFreeDiscount
  • 数量折扣

他们都会得到一个名为“canBeApplied(Productable $productable)”的方法。它确实查看了给定的产品,然后确定产品是否有资格获得它所代表的折扣。对于这 3 个不同的折扣,此方法的实现是不同的。

现在,它们的属性几乎相同。它们都具有以下属性: 名称,活动,valid_from,valid_trough。所以我认为我需要一个包含这些字段/列的数据库表来代表这 3 个折扣雄辩模型:

  • 身份证
  • 姓名
  • discountable_type
  • 有效
  • valid_from
  • valid_until

discountable_type 列将是折扣的完全限定类名。如果是 10 美元和 20 美元的礼品卡,您将使用名称“礼品卡 - 10 美元”和“20 美元”,它们都是“Namspace\For\AbsoluteDiscount\AbsoluteDiscount”的 discountable_type。

我认为我需要做的是:

  • 为这些折扣模型创建一个基本的 eloquent 模型以进行扩展。
  • 覆盖每个折扣中的 where 方法,在返回它之前附加一个额外的 where 方法调用,并将 this 作为其内容('discountable_type'、'='、AbsoluteDiscount::class)。

但是我们也有方法:首先,获取所有,也许还有更多需要被覆盖的方法。那么储蓄呢?并且需要对所有 3 个折扣模型执行这些步骤。有没有一种简单的方法可以做到这一点,还是我不能这样做?

【问题讨论】:

标签: php mysql laravel eloquent


【解决方案1】:

我认为你可以在这里使用这个特性:https://github.com/Nanigans/single-table-inheritance

但是,它基于 singleTableTypeField 属性,它不允许通过条件获取孩子,只能通过某种 type_id 列。但我认为修改它以满足您的需求并不难。

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2012-05-23
    • 2014-07-24
    • 2017-02-07
    • 2011-11-17
    • 2019-02-25
    相关资源
    最近更新 更多