avinash403/laravel-dynamic-observer

允许在模型本身中观察Eloquent模型的包

v1.0.4 2018-06-02 18:48 UTC

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),进行更改,并向开发分支提交拉取请求