php - Laravel Eloquent - 一张 table 的多个模型

标签 php mysql laravel eloquent

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

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

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

    现在,它们的属性几乎相同。它们都具有以下属性:
    名称、事件、valid_from、valid_trough。所以我想我需要有一个包含这些字段/列的单个数据库表来表示这 3 个折扣 Eloquent 模型:
  • id
  • 姓名
  • 折扣类型
  • 事件
  • valid_from
  • valid_until

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

    我想我需要做的是:
  • 为那些要扩展的折扣模型创建一个基本的 Eloquent 模型。
  • 覆盖每个折扣中的 where 方法,在返回之前附加一个额外的 where 方法调用,并将 this 作为其内容('discountable_type', '=', AbsoluteDiscount::class)。

  • 但随后我们也有方法:get、first、all 以及可能需要覆盖的更多方法。那储蓄呢?并且需要对所有 3 个折扣模型执行这些步骤。有没有一种简单的方法可以做到这一点,还是我不能这样做?

    最佳答案

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

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

    关于php - Laravel Eloquent - 一张 table 的多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057897/

    相关文章:

    php - 将 WooCommerce 产品简短描述限制为仅文本(禁用tinymce 编辑器)

    php - 在 php 中调整 sql 中的图像大小并显示图像

    php - 如何根据条件执行计数(*)作为总数

    php - Laravel 邮件不通过队列发送

    Laravel 4 方法不允许httpException

    php - CakePHP 在 Controller::redirect 中传递参数

    php - 我在智能手机上没有得到任何 css

    java - 我需要在 Hibernate 中手动创建关系表吗?

    php - CodeIgniter - 错误号 : 1146 (Table doesn't exist after execute a "CREATE TABLE" command)

    php - 查询声明 2 个不同变量时遇到问题?