【发布时间】: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 个折扣模型执行这些步骤。有没有一种简单的方法可以做到这一点,还是我不能这样做?
【问题讨论】:
-
你看过文档中的多态关系吗? laravel.com/docs/5.6/…
标签: php mysql laravel eloquent