avinash403 / laravel-dynamic-observer
允许在模型本身中观察Eloquent模型的包
Requires (Dev)
- illuminate/database: ^5.6
- illuminate/events: ^5.6
- phpunit/phpunit: ^7.1
- robmorgan/phinx: 0.5.*
This package is not auto-updated.
Last update: 2024-09-24 15:47:43 UTC
README
在Laravel或其他使用Eloquent进行数据建模的框架中,观察者是一个有用的功能。但在模型更新时未事先注册的情况下执行操作是很有用的。
Laravel Dynamic Observer提供了一种简单的方法,通过在模型中导入它并定义监听器方法,在模型本身中观察模型。
动机
自己创建一个特质并与Eloquent模型事件一起使用非常简单,但在所有项目中编写相同的代码不值得。除此之外,还有在模型的创建、更新和删除上执行相同操作的情况(例如,在记录更新、创建或删除后清除特定的缓存)。在这些场景中,我们有两种选择:在所有事件监听器中编写相同的代码,或者创建一个公共方法并在所有事件中调用它。后者是制作此包的关键动机,这样我们就可以在我们的模型中有一个在模型活动(创建、更新或删除)发生时自动调用的方法。
兼容性
任何具有Eloquent数据库模型的项(可以是非Laravel项目)
通过Composer安装
$ composer require avinash403/laravel-dynamic-observer
使用示例
//import ObserveModel trait use ObserveModel\ObserveModel class ExampleModel extends Model { //include trait in the test class use ObserveModel; /** * will be called before the create operation happens on the current model * @param ExampleModel $model instance of ExampleModel * @return void */ private function beforeCreate($model) { //write your logic here } }
可用方法
- beforeCreate : 在记录创建之前调用
- afterCreate : 在记录创建之后调用
- beforeUpdate : 在记录更新之前调用
- afterUpdate : 在记录更新之后调用
- beforeDelete : 在记录删除之前调用
- afterDelete : 在记录删除之后调用
- beforeSave : 在调用保存方法之前调用
- afterSave : 在调用保存方法之后调用
- beforeModelActivity : 在任何模型活动之前调用
- afterModelActivity : 在任何模型活动之后调用
- afterRetrieve : 在检索记录之后调用
注意事项
仅当在更新或删除之前从数据库检索记录时,与更新和删除相关的方法才会被调用。原因是我们使用查询直接更新时,实际上并未执行任何操作。例如。
Model::where('field','value')->update(['field'=>'new value']);
在这里我们调用Eloquent.Builder@update
而不是Model@update
,因此无法调用更新事件。同样适用于删除事件。
但当我们这样做时
Model::where('field','value')->first()->update(['field'=>'new value']);
我们确切地知道我们检索了哪个记录。在这种情况下,我们使用了Model@update
,这将触发事件。
测试
从此包的根目录中简单地输入composer test
运行测试。
在github上贡献
克隆此存储库(https://github.com/avinash403/laravel-dynamic-observer.git),进行更改,并向开发分支提交拉取请求