关于updateAll之后事件触发的问题 [ 2.0 版本 ]
大家好,请问, 使用AR updateAll
是不是 不会触发 afterUpdate
等事件?
类似的内容 请问哪里查看? 代码中是否可以 在使用 updateAll
之后 手工触发 afterUpdate
事件?
最佳答案
-
updateAll()
只返回受影响的行数,那个行数在一个事件里能玩出什么名堂呢?所以afterUpdate对于updateAll来说没有任何意义。你想干什么,就在调用updateAll()
之后调用一个函数就好了,或者触发一个自定义的事件。比较update()和updateAll()的区别。或者看这两个函数的框架源码。
共 4 条回复呵呵,不要纠结分的事情,能帮到人也是很开心的。之前我就和舰长说不好意思再答题了,大家一起玩才好玩嘛。
函数就不用说了吧。下面贴一点我原来学习Event用的代码片段你参考一下吧:
1
定义Event派生类
。你要传参给事件句柄才需要这个类,不传参时trigger函数的Event使用缺省值null(第二个参数)。<?php namespace app\modules\advertise\components; use yii\base\Event; class CrudEvent extends Event { public $id; }
2
定义事件句柄
,就是事件被触发之后执行的函数,本例是写成一个杂项类Misc的静态方法:namespace common\helpers; ...... public static function addCustomer($event) { $id = $event->id; die("addCustomer, id: $id"); } public static function delCustomer($event) { $id = $event->id; die("delCustomer, id: $id"); }
3
定义事件名称,并与事件句柄绑定
:事件名称,通常是写成类的const属性,大写。本例写在控制器中,并重载beforeAction函数,绑定“事件名称”和“事件句柄”use app\modules\advertise\components\CrudEvent; #上面的事件类 ...... const EVENT_ADDCUSTOMER = 'add-customer'; #用户添加了客户,该用户的客户总数+1 const EVENT_DELCUSTOMER = 'del-customer'; #用户删除了客户,该用户的客户总数-1 ...... /** * @inheritdoc */ public function beforeAction($action) { if (parent::beforeAction($action)) { $this->on(self::EVENT_ADDCUSTOMER, ['common\helpers\Misc','addCustomer']); $this->on(self::EVENT_DELCUSTOMER, ['common\helpers\Misc','delCustomer']); return true; } else { return false; } }
4
触发事件
。本例是在控制器的actionCreate中测试的,按照MVC的思想,放在Model的afterSave方法中更好。$this->trigger(self::EVENT_ADDCUSTOMER, new CrudEvent(['id'=>$id]));
5
测试
。添加记录后看到浏览器显示addCustomer, id: 2
,就说明trigger成功了。
其他 3 个回答
xjdata
注册时间:2011-12-07
最后登录:2024-05-05
在线时长:112小时38分
最后登录:2024-05-05
在线时长:112小时38分
- 粉丝23
- 金钱14169
- 威望75
- 积分16039