igaster/laravel-model-events

Laravel自定义模型事件

v2.0.2 2020-10-29 22:24 UTC

This package is auto-updated.

Last update: 2024-08-28 17:34:30 UTC


README

Laravel License Downloads Build Status Codecov

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

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

安装

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

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。所有都是可选的