9
TP6的数据库事件before_select是怎么用的, 研究了一下午,看了一下午源码,也没搞出来怎么用. 这个地方似乎需要返回结果集,比如select的结果, 但是如果使用select,又会触发before_select事件,最后进入死循环.
找了半天也没找到怎么用的,
Db::event('before_select', function (Query $query) {
$model = $query->where('sass_uid', Sass::getUid())->find();
// dump($sql);
// $query->where('sass_uid', Sass::getUid())->select();
// $list = Db::query($sql);
return [$model];
// return true;
});
复制代码 按照我的理解,只需要在事件里面操作query就可以了, 但是实际上,如果存在事件,就不会进行原有的查询,会把事件的返回当做结果集,这应该是不对的吧.
public function select(BaseQuery $query): array
{
$resultSet = $this->db->trigger('before_select', $query);
if (!$resultSet) {
// 执行查询操作
$resultSet = $this->pdoQuery($query, function ($query) {
return $this->builder->select($query);
});
}
return $resultSet;
}
改进,似乎只要把!
去掉就可以了
if (!$resultSet) {
改为
if ($resultSet) {