jlorente/laravel-identitystamps

一个用于注册并控制创建、更新和删除模型用户的 Laravel 插件

1.0.2 2020-09-22 14:58 UTC

This package is auto-updated.

Last update: 2024-09-23 00:38:04 UTC


README

一个用于注册并控制创建、更新和删除模型用户的 Laravel 插件。

使用此插件,您可以自动管理控制字段 "created_by"、"updated_by" 和 "deleted_by",这些字段将存储操作模型的用户的身份。

安装

安装此扩展的首选方式是通过 Composer

安装 Composer 后,您可以使用以下命令安装扩展

$ php composer.phar require jlorente/laravel-identitystamps

或者在您的 composer.json 文件的 require 部分添加

...
    "require": {
        "jlorente/laravel-identitystamps": "*"
    }

配置

在您的 config/app.php 服务提供者列表中注册 ServiceProvider。

config/app.php

return [
    //other stuff
    'providers' => [
        //other stuff
        \Jlorente\Laravel\IdentityStamp\IdentityStampServiceProvider::class,
    ];
];

使用方法

在迁移中

您可以使用 Blueprint 方法 identityStamps() 添加可空的 "created_by" 和 "updated_by" UNSIGNED INTEGER 等效列。当然,您也可以自己创建具有自定义名称和类型的列,然后使用这些名称配置模型类,但请记住列的类型应与您的 UserModel 的键类型相同。

class MyMigration extends Migration
{

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('my_table', function (Blueprint $table) {
            $table->increments('id');
            $table->string('my_field');
            $table->timestamps();
            $table->identityStamps();
        });
    }
}

如果您使用软删除,也许您还想为删除添加一个身份戳。您可以通过使用 softDeletesIdentityStamps() 方法来实现,该方法将添加一个可空的 "deleted_by" UNSIGNED INTEGER 列。

class MyMigration extends Migration
{

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->increments('id');
            $table->string('my_field');
            $table->timestamps();
            $table->identityStamps();
            $table->softDeletes();
            $table->softDeletesIdentityStamps();
        });
    }
}

将行为附加到模型

要启用模型的身份戳,请在模型上使用 Jlorente\IdentityStamp\Eloquent\IdentityStamps 特性

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Jlorente\Laravel\IdentityStamp\Database\Eloquent\IdentityStamps;

class Product extends Model
{
    use IdentityStamps,
        SoftDeletes;
}

进一步考虑

使用自定义属性名称

您可以通过在模型上定义类常量来使用自定义属性名称以存储身份。

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Jlorente\Laravel\IdentityStamp\Database\Eloquent\IdentityStamps;

class Product extends Model
{
    use IdentityStamps,
        SoftDeletes;

    const CREATED_BY = 'my_custom_identity_creation_field';
    const UPDATED_BY = 'my_custom_identity_update_field';
    const DELETED_BY = 'my_custom_identity_deletion_field';
}

如果您不喜欢类常量,也可以覆盖解析身份戳字段的特性方法。

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Jlorente\Laravel\IdentityStamp\Database\Eloquent\IdentityStamps;

class Product extends Model
{
    use IdentityStamps,
        SoftDeletes;

    public function getCreatedByColumn() 
    {
        return 'my_custom_identity_creation_field';
    }

    public function getUpdatedByColumn() 
    {
        return 'my_custom_identity_update_field';
    }

    public function getDeletedByColumn() 
    {
        return 'my_custom_identity_deletion_field';
    }
}

使用自定义身份 ID 存储在身份字段中

默认情况下,特性将使用 Laravel 的 Auth::id() 方法来检索存储在身份戳字段中的 ID。您可以自由地覆盖 getIdentityStampValue() 方法以返回您想要存储在字段中的值。

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Auth;
use Jlorente\Laravel\IdentityStamp\Database\Eloquent\IdentityStamps;

class Product extends Model
{
    use IdentityStamps,
        SoftDeletes;

    public function getIdentityStampValue() 
    {
        return Auth::user() ? Auth::user()->email : null;
    }
}

许可证

版权 © 2019 José Lorente Martín jose.lorente.martin@gmail.com.

根据 BSD 3-Clause 许可证授权。有关详细信息,请参阅 LICENSE.txt。