catch-admin
catch-admin copied to clipboard
updateBy 等方法,导致 `think\model` 的事件参数参数不能正确传递
BaseOptionsTrait.php: 78
public function updateBy($id, $data, string $field = ''): bool
{
if (static::update($this->filterData($data), [$field ? : $this->getPk() => $id], $this->field)) {
$this->updateChildren($id, $data);
return true;
}
return false;
}
事件触发时,会吧触发事件的 model
作为参数传入事件处理方法中,
而 static::update
使用的是 new static()
, 所以事件处理方法中接受到的 $model
是一个新的空对象。。。
最佳实践
更新的最佳实践原则是:如果需要使用模型事件,那么就先查询后更新,如果不需要使用事件或者不查询直接更新,直接使用静态的Update方法进行条件更新,如非必要,尽量不要使用批量更新。
这是文档讲的,你是用事件,需要先查询,再更新。直接更新是不会触发事件。
嗯嗯, 生成器这边 catcher/generate/factory/Controller.php
的 update 方法 使用的是 updateBy
所以提一下,看有没有修改的必要。
嗯嗯, 生成器这边
catcher/generate/factory/Controller.php
的 update 方法 使用的是updateBy
所以提一下,看有没有修改的必要。
可以先用 save 更新。容我看看改动之后影响大不大