我有3个雄辩的模型几乎相同,代表折扣:
他们都会得到一个名为" canBeApplied(Productable $ productable)"的方法。哪个可以查看给定的产品,然后确定产品是否有资格获得它所代表的折扣。对于那3个不同的折扣,这种方法的实现是不同的。
现在,他们的属性几乎相同。他们都有这些属性: name,active,valid_from,valid_trough。所以我想我需要有一个单独的数据库表,这些字段/列代表这3个折扣雄辩的模型:
列discountable_type将是折扣的完全限定类名。如果是10美元和20美元的礼品卡,您将使用名称"礼品卡 - 10美元"和" 20美元"并且它们都是" Namspace \ For \ AbsoluteDiscount \ AbsoluteDiscount"的discountable_type。
我在想我需要做的是:
但是我们也有方法:首先,所有,甚至更多需要被覆盖的方法。那么储蓄呢?所有3种折扣模型都需要完成这些步骤。是否有一种简单的方法可以做到这一点,或者这是我不能做的事情?
答案 0 :(得分:1)
我认为你可以在这里使用这个特性:https://github.com/Nanigans/single-table-inheritance
但是,它基于singleTableTypeField属性,它不允许按条件获取子级,只能通过某种type_id列。但我认为修改它以满足您的需求并不是那么困难。
答案 1 :(得分:0)
嗯,这不是一个多态关系,但看起来有点像。多态关系指定模型属于一个或多个其他模型。这是不同的情况,因为这些模型不属于其他模型,但都是相似的。我不知道这可能是什么解决方案