tris-nm / userstamps
Laravel Userstamps 提供了一个 Eloquent 特性,该特性可以自动在您的模型上维护 `created_by` 和 `updated_by` 列,这些列由应用程序中当前认证的用户填充。
Requires
- php: >=5.5.9
- illuminate/support: ^5.2|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- illuminate/database: ^5.2|^6.0|^7.0|^8.0|^9.0
- orchestra/testbench: ^3.1|^4.0|^5.0|^6.0|^7.0
- phpunit/phpunit: ^5.0|^6.0|^7.0|^8.4|^9.0
This package is auto-updated.
Last update: 2024-09-15 12:49:45 UTC
README
Laravel Userstamps 提供了一个 Eloquent 特性,该特性可以自动在您的模型上维护 created_by 和 updated_by 列,这些列由应用程序中当前认证的用户填充。
当使用 Laravel SoftDeletes
特性时,该包也会处理 deleted_by
列。(包括批量删除)
安装
此包需要 Laravel 5.2 或更高版本,并且运行在 PHP 5.6 或更高版本的 PHP 上。
可以使用 composer 安装此包
composer require tris-nm/userstamps
用法
您的模型需要包含一个 created_by
和 updated_by
列,默认为 null
。
如果使用 Laravel SoftDeletes
特性,还需要一个 deleted_by
列。
列类型只需是文本字段。
示例迁移
$table->text('created_by', 100)->nullable(); $table->text('updated_by', 100)->nullable(); $table->text('deleted_by', 100)->nullable();
现在您可以在模型中加载此特性,userstamps 将自动维护
use Trisnm\Userstamps\Userstamps; class Foo extends Model { use Userstamps; }
如果需要,您可以覆盖 created_by
、updated_by
或 deleted_by
列的名称,只需在您的模型中设置适当的类常量即可。确保在迁移中匹配这些列名。
use Trisnm\Userstamps\Userstamps; class Foo extends Model { use Userstamps; const CREATED_BY = 'alt_created_by'; const UPDATED_BY = 'alt_updated_by'; const DELETED_BY = 'alt_deleted_by'; }
也有方法可以暂时停止在您的模型上自动维护 userstamps
$model->stopUserstamping(); // stops userstamps being maintained on the model $model->startUserstamping(); // resumes userstamps being maintained on the model
解决方案
此包通过挂钩到 Eloquent 的模型事件监听器来工作,并受到所有此类监听器相同的限制。
当您对绕过 Eloquent 的模型进行更改时,事件监听器不会被触发,userstamps 也不会更新。
通常这会在批量更新或关系时发生。
在这个例子中,模型关系是通过 Eloquent 更新的,userstamps 将会 维护
$model->foos->each(function ($item) { $item->bar = 'x'; $item->save(); });
然而在这个例子中,模型关系是批量更新的,并绕过了 Eloquent。Userstamps 不会 维护
$model->foos()->update([ 'bar' => 'x', ]);
为了解决这个问题,提供了辅助方法 - updateWithUserstamps
。这种行为与 update
相同,但它确保在模型上维护 updated_by
属性。
您通常不需要使用这些方法,除非进行绕过 Eloquent 事件的批量更新。
在这个例子中,模型是批量更新的,userstamps 不会 维护
$model->where('name', 'foo')->update([ 'name' => 'bar', ]);
然而在这个例子中,模型使用辅助方法批量更新,userstamps 将会 维护
$model->where('name', 'foo')->updateWithUserstamps([ 'name' => 'bar', ]);
许可证
此开源软件根据 MIT 许可证 许可。