TP6的查询事件(before_select和before_find)问题

浏览:1962 发布日期:2021/03/19
5.0.0 - 严重 - 未处理
TP版本6.0.7
如果注册了before_select和before_find事件,注册的闭包无返回值,会报一个
#0 [0]TypeError in ModelRelationQuery.php line 463
的异常
查到think-orm的think\db\PDOConnection的select和find方法均有返回值是否为一个非空结果集的判断,在注册的闭包中是没有返回值的,实际情况却是判定结果集不为空。
实际出错的位置是framework的think\Db第111行的trigger方法的第三个参数的默认值,原代码如下:public function trigger(string $event, $params = null, bool $once = false)应改为public function trigger(string $event, $params = null, bool $once = true)在未修复这个BUG之前,如果需要使用数据库的before_select和before_find事件,可以重写一个类继承think\Db并覆盖trigger方法    public function trigger(string $event, $params = null, bool $once = false) {
        parent::trigger($event, $params, $once);
    }
//或者
    public function trigger(string $event, $params = null, bool $once = true) {
        return parent::trigger($event, $params, $once);
    }
并在provider.php的配置文件中加入'think\Db' => '新类名'
评论(
后面还有条评论,点击查看>>