Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel Eloquent-一张桌子有多个模型_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php Laravel Eloquent-一张桌子有多个模型

Php Laravel Eloquent-一张桌子有多个模型,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我有3个很有说服力的模型,它们几乎相同,代表折扣: 绝对折扣 OneProductforFree折扣 数量折扣 它们都将得到一个名为“canBeApplied(Productable$Productable)”的方法。它会查看给定的可生产产品,然后确定该可生产产品是否有资格享受它所代表的折扣。对于这3种不同的折扣,此方法的实现是不同的 现在,它们的属性基本相同。它们都具有以下属性: 名称、活动、有效的\u来源、有效的\u槽。因此,我认为我需要一个包含这些字段/列的数据库表来表示这3个折扣雄辩

我有3个很有说服力的模型,它们几乎相同,代表折扣:

  • 绝对折扣
  • OneProductforFree折扣
  • 数量折扣
它们都将得到一个名为“canBeApplied(Productable$Productable)”的方法。它会查看给定的可生产产品,然后确定该可生产产品是否有资格享受它所代表的折扣。对于这3种不同的折扣,此方法的实现是不同的

现在,它们的属性基本相同。它们都具有以下属性: 名称、活动、有效的\u来源、有效的\u槽。因此,我认为我需要一个包含这些字段/列的数据库表来表示这3个折扣雄辩的模型:

  • 身份证
  • 名字
  • 可贴现型
  • 活跃的
  • 有效的
  • 有效期至
然后,列discountable_type将显示折扣的完全限定类名。如果是10美元和20美元的礼品卡,您可以使用“礼品卡-10美元”和“20美元”这两个名称,它们都是“Namspace\For\AbsoluteDiscount\AbsoluteDiscount”的可折扣类型

我认为我需要做的是:

  • 为要扩展的折扣模型创建一个基本的雄辩模型
  • 重写每个折扣中的where方法,在返回它之前附加一个where方法调用,并将其作为其内容('discountable_type','=',AbsoluteDiscount::class)

但是我们还有一些方法:get、first、all,可能还有更多需要重写的方法。那么储蓄呢?所有3种折扣模式都需要执行这些步骤。有没有一种简单的方法可以做到这一点,或者这是我不能做的事情?

我想你可以在这里使用这个特点:


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

您看过文档中的多态关系吗?