Yii1.1.14调用Products->save()更新记录报Products.Array未定义如何解决
问题排查与解决方法
从报错堆栈可以直接定位问题来源:你使用的第三方扩展EAdvancedArBehavior在执行beforeSave阶段的fixBELONGS_TO方法时,错误尝试读取Products模型不存在的Array属性,和原生Yii 1.1.14的ActiveRecord逻辑无关。
排查步骤
- 先验证扩展是否为故障根源:临时注释掉Products模型中挂载
EAdvancedArBehavior的代码,再执行保存逻辑,如果可以正常更新,即可确认是该扩展导致的问题。 - 检查关联定义:重点核对Products模型中
BELONGS_TO类型的关联配置,确认所有关联的参数格式符合Yii 1.1的规范,没有参数错位、将数组配置直接写为属性名的错误。 - 检查扩展版本:你使用的
EAdvancedArBehavior大概率是未适配Yii 1.1.14的旧版本,该版本存在已知bug:处理关联配置时会错误将数组类型的配置识别为字符串Array,直接当作模型属性读取触发报错。
解决方法
- 方案一:修复扩展代码,打开
protected/extensions/EAdvancedArBehavior.php,找到第45行读取模型属性的代码段,先判断要读取的属性名是否为合法的模型属性,不合法则跳过处理:
// 原代码大概类似 $value = $model->$related[0]; // 修改为增加判断 if (property_exists($model, $related[0]) || $model->hasAttribute($related[0])) { $value = $model->$related[0]; } else { continue; }
- 方案二:替换为适配Yii 1.1.14的稳定版
EAdvancedArBehavior,或者移除该扩展,直接用Yii原生关联逻辑实现业务需求。 - 方案三:如果本次保存不需要触发关联处理和字段验证,可以调用
$product->save(false)跳过所有前置事件直接执行更新,该方法适合临时验证问题,不推荐作为长期方案使用。
内容的提问来源于stack exchange,提问作者Den
相关产品推荐
相关产品推荐

