菜鸟常忽略的地方 - 不要重写beforeSave

  • 作者:KK

  • 发表日期:2017.3.25


不要随便重写beforeSave

不时会在群里看到一些菜鸟企图重写AR模型父类的public function beforeSave($insert)方法来在save方法执行之前做一些事

其实这是不正确的行径,官方在beforeSave里是已经设定了一些执行代码的,不要随便去改动它

应该监听BaseActiveRecord::EVENT_BEFORE_INSERTBaseActiveRecord::EVENT_BEFORE_UPDATE两个事件来实现入库前的逻辑


要在insert或update前做事情应该监听事件

也是因为很多新手不了解事件这个知识点所以没有想到用事件监听

要在模型insert或update前做自己的事其实是这样用事件的:

$user = new User([
	'name' => 'Jay'
	'age' => 17
]);
$user->on(User::EVENT_BEFORE_INSERT, function(){
	echo '准备insert了';
});
$user->save(); // 准备insert了


$user2 = User::findOne(111);
$user2->on(User::EVENT_BEFORE_UPDATE, function(){
	echo '准备update了';
});
$user2->save(); // 准备update了