navjobs / temporal-models
轻松使用Laravel创建时间模型。
Requires
- php: >=7.0.0
- illuminate/database: ^5.1
- illuminate/events: ^5.1
Requires (Dev)
- mockery/mockery: ^0.9.4
- phpunit/phpunit: ^4.0
- satooshi/php-coveralls: 1.*
This package is not auto-updated.
Last update: 2022-05-23 23:39:44 UTC
README
Laravel时间模型
为Laravel 5.1+添加对时间模型的支持
通常在数据库中,实体由表中的一行表示,当这行更新时,旧信息将被覆盖。时间模型允许数据按时间引用,它使得查询实体在给定时间的状态成为可能。
例如,如果你想跟踪产品的变化,那么当下单时,你可以知道产品的状态,而无需在订单表中重复数据。你可以使产品成为时间模型,并使用订单的时间来引用所订购产品在该时刻的状态,而不是它们当前的状态,正如没有使用时间数据所发生的那样。
时间模型也可以用于审计像维基页面之类的更改。任何更改都会自动记录,而无需使用单独的日志表。
安装
您可以通过以下命令使用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属性包含将时间记录连接在一起的列的名称。在上面的例子中,该模型将代表佣金率。它的$
使用方法
创建时间记录
当创建时间记录时,会自动解决任何排程冲突。如果新创建的记录与先前安排的记录冲突,则先前安排的记录将被删除。任何已开始的记录将具有其valid_end设置为新创建的记录的valid_start。时间记录不能创建在过去。
更新时间记录
为了保持其历史性质,对时间记录的更新仅限于它们开始后的valid_end。尝试更新任何其他字段将失败。如果这种行为不理想,可以通过向时间模型添加以下属性来修改它
protected $enableUpdates = true;
此外,可以通过调用$model->enableUpdates()->save();
来动态更改行为
删除时间记录
已开始的时间记录不能被删除。当对它们调用删除方法时,它们的有效结束时间将被设置为当前时间。如果对计划中的记录调用删除,则它将成功。
方法和作用域
《Temporal》属性包括一个isValid()方法,该方法可以可选地接收一个Carbon对象。该方法返回模型是否在提供的日期或未提供Carbon对象时的当前日期有效。此外,还包括valid()
和invalid()
作用域。这些作用域在传递的Carbon对象的时间点查询有效或无效的作用域,如果没有传递Carbon对象,则查询当前日期的作用域。