ricardosierra / laravel-model-events
Laravel自定义模型事件
v1.0.5
2020-06-10 15:00 UTC
Requires
- php: >=7.1
- illuminate/contracts: 5.* | ^6.0 | ^7.0 | ^8.0
Requires (Dev)
- orchestra/testbench: ~4.0
- phpunit/phpunit: ^8.0
README
这就像为你的模型记日记一样简单!
你可以为任何模型记录一条简短的消息,包括当前时间戳和认证用户。
安装
A) 执行 composer require ricardosierra/laravel-model-events
此包包含一个服务提供者,它将由Laravel自动发现。
B) 运行迁移。
这将创建一个名为 log_model_events
的表,用于存储事件。
用法
步骤1:将特性添加到你的模型中
use Igaster\ModelEvents\Traits\LogsModelEvents; class MyModel extends Model { use LogsModelEvents;
步骤2:记录你的事件
a) 手动
使用 logModelEvent("描述")
方法来记录任何事件
class MyModel extends Model { public function myMethod() { // ... $modelEvent = $this->logModelEvent("Something Happened!"); }
logModelEvent()
方法还会记录 a) 当前认证用户和 b) 相关模型实例 c) 当前时间戳- 这是一个公共方法。你也可以从你的
$model
实例的任何地方调用它
b) 自动捕获Laravel模型事件
Eloquent模型在更新、创建等操作期间会触发 多个事件 。这些事件可以自动记录。只需在模型中定义 $logModelEvents
静态数组中的这些事件
class MyModel extends Model { public static $logModelEvents = [ 'created', 'updated', ];
- 现在每当这个模型实例发生变化时,事件将被记录并归因于认证用户。
- 作为额外的好处,描述中还会添加所有更新的属性的报告!
步骤3:获取事件列表
a) 从一个 $model
实例
// This will retrieve the last 10 events logged for $model instance. $modelEvents = $model->getModelEvents(10);
b) 从一个 $user
实例
为了从 $user 模型查询事件,你必须首先将此特性包含在 User 类中:注意:此特性对于此包的其他所有功能都是可选的!
use Igaster\ModelEvents\Traits\UserLogsModelEvents; class User extends Authenticatable { use UserLogsModelEvents;
// This will retrieve the last 10 events logged by this $user. $modelEvents = $user->getUserModelEvents(10);
c) 构建你自己的查询
所有与 LogModelEvent
模型的关系都已实现。以下是一些有效的查询
$user->modelEvents; // Get all model events for $user $model->modelEvents; // Get all model events for $model $model->modelEvents()->where(`created_at`, '>', $yesterday)->get(); // Custom Query // Or you can build queries with the LogModelEvent model: LogModelEvent::whereUser($user)->whereModel($model)->get();
步骤4:显示事件
a) 手动
通过 LogModelEvents
模型,你可以检索 $user
和 $model
实例
foreach($model->modelEvents as $modelEvent){ $modelEvent->user; // User model $modelEvent->model; // Model related with the event (though polymorphic relathinships) $modelEvent->description; // String $modelEvent->created_at; // Timestamp }
注意 $modelEvent->model
是一个多态关系,它将在相应的类中检索一个 $model
实例。
b) 使用包示例视图
你可以在视图中包含 model-events::modelEvents
部分来渲染事件列表
<div class="row"> <div class="col-md-12"> <h4>Actions History:</h4> @include('model-events::modelEvents', [ 'model' => $order ]) </div> </div>
可用参数包括:model
、user
、count_events
。所有都是可选的