igaster / laravel-model-events
Laravel自定义模型事件
v2.0.2
2020-10-29 22:24 UTC
Requires
- php: >=7.1
- illuminate/contracts: >= 5.0
Requires (Dev)
- orchestra/testbench: ~4.0
- phpunit/phpunit: ^8.0
README
这就像为你的模型记日记一样简单!
你可以为任何模型记录一条带当前时间戳和认证用户的消息。
安装
A) 执行composer require igaster/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
。所有都是可选的