Laravel:ORM模型为自己的方法建立Observer
来源:互联网 发布:sql执行视图命令 编辑:程序博客网 时间:2024/06/05 22:43
Laravel:ORM模型为自己的方法建立Observer
背景
在ORM模型中,虽然提供了很多的数据库操作方法,如save,delete等,当时如果想要一次插入多条数据时,通常使用insert方法。此时,如果我们要使用观察者方法对insert进行观察时,会发现没有任何作用。这是因为,ORM模型中并没有自己实现这个方法,而是通过__call这个方法调用一个newQuery()方法,然后调用insert。这样的话,使用观察者就无法观察到insert这个方法。
解决方法
解决问题的思路是:在调用insert方法时,自己在模型中实现一个insert方法来模拟__call的动作,然后手动触发一个insert事件,在hasEvents类中,将这个事件添加后,就可以使用观察者观察到了。
具体如下:
1 在模型中添加一个insert方法:
public function insert(array $options = []) { $query = $this->newQueryWithoutScopes(); if($result = $query->insert($options)) { $this->fireModelEvent('insert', false); } }
这个方法是调用其它的方法实现了项数据库中的插入数据的方法,这个方法可以在追踪__call时找到的。然后插入成功后,发出一个事件,事件名为’insert’。此时,由于hasEvent中,并没有这个事件,所以无法观察到。
2 在hasEvent中添加事件
public function getObservableEvents() { return array_merge( [ 'creating', 'created', 'updating', 'updated', 'deleting', 'deleted', 'saving', 'saved', 'restoring', 'restored', 'insert', ], $this->observables ); }
到这一步,就可以使用观察者观察到insert事件了。
3 在观察者中添加观察方法
public function insert(Student $student) { dd('insert.....'); }
此时就可以实现,当使用模型insert向数据库插入数据时,就可以观察到这个数据库操作了。
具体的ORM模型观察者的使用请看文档
阅读全文
0 0
- Laravel:ORM模型为自己的方法建立Observer
- Laravel基础-Eloquent ORM 模型
- laravel框架总结 -- ORM模型
- Laravel的ORM入门
- laravel ORM 只开启created_at的几种方法
- laravel的Eloquent ORM操作
- Laravel 模型使用scope前缀的方法
- 建立自己的ORM-从SQL2005中生成ORM数据类(.net)
- 建立自己的3D模型文件
- 为自己的C# ORM 写一个代码自动生成器
- Laravel Eloquent ORM的hasOne和belongsTo
- laravel ORM 的setAttributes 与 getAttributes
- laravel的Eloquent模型
- 建立自己的3D静态模型文件
- 建立自己的3D静态模型文件
- 如何自己编写的ORM
- laravel中常用的命令(路由列表、建立模型、建立数据迁移文件、注册中间件、 清除缓存)
- 建立对象模型方法
- Android双向表格可滑动可双向适配
- osmf grindPlayer的各种api。
- 缓冲区分析—ArcGIS API for JavaScript
- Differences between typedef and #define
- 竞争条件(race condition)
- Laravel:ORM模型为自己的方法建立Observer
- 线程同步方法之交换输出
- P1111 修复公路
- hankson的BT(bio-tech 变态)题 关于for循环边界
- 详细设计
- LeakCanary开源框架使用说明
- Unity Game视图不显示flare解决方法
- WPF 解决无边框产生的相关问题
- mybatis 异常 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding