navjobs/temporal-models

此包已被弃用且不再维护。未建议替代包。

轻松使用Laravel创建时间模型。

1.0.7 2017-11-16 15:30 UTC

This package is not auto-updated.

Last update: 2022-05-23 23:39:44 UTC


README

Circle CI Coverage Status Code Climate

Laravel时间模型

为Laravel 5.1+添加对时间模型的支持

通常在数据库中,实体由表中的一行表示,当这行更新时,旧信息将被覆盖。时间模型允许数据按时间引用,它使得查询实体在给定时间的状态成为可能。

例如,如果你想跟踪产品的变化,那么当下单时,你可以知道产品的状态,而无需在订单表中重复数据。你可以使产品成为时间模型,并使用订单的时间来引用所订购产品在该时刻的状态,而不是它们当前的状态,正如没有使用时间数据所发生的那样。

时间模型也可以用于审计像维基页面之类的更改。任何更改都会自动记录,而无需使用单独的日志表。

来自FuelPHP文档

安装

您可以通过以下命令使用Composer安装此包

composer require navjobs/temporal-models

接下来,您希望使其成为时间模型的模型必须在它的模式中有以下字段

$table->dateTime('valid_start');
$table->dateTime('valid_end')->nullable();

该模型本身必须使用Temporal特质,并定义两个受保护的属性,如下例所示

class Commission extends Model
{
    use Temporal;

    protected $dates = ['valid_start', 'valid_end'];
    protected $temporalParentColumn = 'representative_id';
}

$temporalParentColumn属性包含将时间记录连接在一起的列的名称。在上面的例子中,该模型将代表佣金率。它的$可能是'representative_id'。代表/销售员在任何给定时间只有一个活跃的佣金率。以时间方式表示佣金使我们能够记录佣金率的历史,并安排未来的佣金率。

使用方法

创建时间记录

当创建时间记录时,会自动解决任何排程冲突。如果新创建的记录与先前安排的记录冲突,则先前安排的记录将被删除。任何已开始的记录将具有其valid_end设置为新创建的记录的valid_start。时间记录不能创建在过去。

更新时间记录

为了保持其历史性质,对时间记录的更新仅限于它们开始后的valid_end。尝试更新任何其他字段将失败。如果这种行为不理想,可以通过向时间模型添加以下属性来修改它

protected $enableUpdates = true;

此外,可以通过调用$model->enableUpdates()->save();来动态更改行为

删除时间记录

已开始的时间记录不能被删除。当对它们调用删除方法时,它们的有效结束时间将被设置为当前时间。如果对计划中的记录调用删除,则它将成功。

方法和作用域

《Temporal》属性包括一个isValid()方法,该方法可以可选地接收一个Carbon对象。该方法返回模型是否在提供的日期或未提供Carbon对象时的当前日期有效。此外,还包括valid()invalid()作用域。这些作用域在传递的Carbon对象的时间点查询有效或无效的作用域,如果没有传递Carbon对象,则查询当前日期的作用域。