ricardosierra/laravel-model-events

Laravel自定义模型事件

v1.0.5 2020-06-10 15:00 UTC

This package is auto-updated.

Last update: 2024-09-11 00:52:12 UTC


README

Laravel License Downloads Build Status Codecov

这就像为你的模型记日记一样简单!

你可以为任何模型记录一条简短的消息,包括当前时间戳和认证用户。

安装

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) 使用包示例视图

image

你可以在视图中包含 model-events::modelEvents 部分来渲染事件列表

    <div class="row">
        <div class="col-md-12">
            <h4>Actions History:</h4>

            @include('model-events::modelEvents', [
                'model' => $order
            ])

        </div>
    </div>

可用参数包括:modelusercount_events。所有都是可选的