tp5.1以模型主键查询更新不能自动更新缓存

浏览:369 发布日期:2017/12/22
5.0.0 - 严重 - 已处理
$id=1;
User::get($id,true);
生成的缓存key是固定的.User::where('id'=>$id)->update($data); //模型定义了update_time自动写入更新生成的缓存key都不一样,导致无法自动更新缓存.protected function getCacheKey($value, $options, $bind = [])
{
    if (is_scalar($value)) {
        $data = $value;
    }

    if (isset($data)) {
        return 'think:' . (is_array($options['table']) ? key($options['table']) : $options['table']) . '|' . $data;
    } else {
        return md5(serialize($options) . serialize($bind));
    }
}
调试代码判断的结果是,getCacheKey方法在查询和更新时判断第一个参数$value,是类似['id','=','3']的值,因为不是标量,会进入第二个判断序列化后返回,但是第二个参数option中因为更新了update_time,每次option序列化都是不一样的,所以返回的key也不一样.
tp5.0正常返回,原因是判断$value是标量,返回的key值固定.
评论(
后面还有条评论,点击查看>>