Laravel Eloquent - 一张桌子的多个模型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel Eloquent - 一张桌子的多个模型相关的知识,希望对你有一定的参考价值。
我有3个雄辩的模型几乎相同并代表折扣:
- AbsoluteDiscount
- OneProductForFreeDiscount
- 数量折扣
他们都会得到一个名为“canBeApplied(Productable $ productable)”的方法。哪个可以查看给定的产品,然后确定产品是否有资格获得它所代表的折扣。对于那3种不同的折扣,这种方法的实现是不同的。
现在,他们的属性几乎相同。它们都具有以下属性:name,active,valid_from,valid_trough。所以我想我需要有一个单独的数据库表,这些字段/列代表这3个折扣雄辩的模型:
- ID
- 那么
- discountable_type
- 活性
- VALID_FROM
- valid_until
然后,discountable_type列将是折扣的完全限定类名。如果是10美元和20美元的礼品卡,您将使用“礼品卡 - 10美元”和“20美元”这两个名称,并且两者都是“Namspace \ For \ AbsoluteDiscount \ AbsoluteDiscount”的discountable_type。
我在想我需要做的是:
- 为要扩展的折扣模型创建基本的雄辩模型。
- 覆盖每个折扣中的where方法,在返回之前附加where方法调用,并将其作为内容('discountable_type','=',AbsoluteDiscount :: class)。
但是我们也有方法:首先,所有,甚至更多需要被覆盖的方法。那么储蓄呢?所有3种折扣模型都需要完成这些步骤。是否有一种简单的方法可以做到这一点,或者这是我不能做的事情?
我想你可以在这里使用这个特性:https://github.com/Nanigans/single-table-inheritance
但是,它基于singleTableTypeField属性,该属性不允许按条件获取子级,只能通过某种type_id列。但我认为修改它以满足您的需求并不是那么困难。
嗯,这不是一个多态关系,但看起来有点像它。多态关系指定模型属于一个或多个其他模型。这是不同的情况,因为这些模型不属于其他模型,但都是相似的。我不知道这可能是什么解决方案
以上是关于Laravel Eloquent - 一张桌子的多个模型的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent,其中字段为 X 或 null