Yii CActiveRecord,列名为;属性“;
我使用了遗留数据库中的CRUD生成器。搜索列值时,出现以下错误: htmlspecialchars()要求参数1是字符串,数组给定(/usr/local/share/yii/framework/web/helpers/CHtml.php:103) 问题在于,该模型有一个名为“attributes”的现有列,该列正在创建冲突。我从_search.php中删除了这个条目,并注释掉了模型中的所有实例,希望至少能让它工作起来,但运气不好。如有任何建议,将不胜感激Yii CActiveRecord,列名为;属性“;,yii,attributes,cactiverecord,Yii,Attributes,Cactiverecord,我使用了遗留数据库中的CRUD生成器。搜索列值时,出现以下错误: htmlspecialchars()要求参数1是字符串,数组给定(/usr/local/share/yii/framework/web/helpers/CHtml.php:103) 问题在于,该模型有一个名为“attributes”的现有列,该列正在创建冲突。我从_search.php中删除了这个条目,并注释掉了模型中的所有实例,希望至少能让它工作起来,但运气不好。如有任何建议,将不胜感激 谢谢。每个CActiveRecord实例
谢谢。每个
CActiveRecord
实例(或CModel
实例)都有一个名为attributes
的getter/setter,可以使用它设置所有属性。这会导致冲突,因为生成的crud代码使用了属性
属性,期望它能如前所述工作
控制器执行以下操作:
$model->attributes=$_POST['ModelClassName'];
// or
$model->attributes=$_GET['ModelClassName'];
这意味着立即设置模型的所有(安全)属性。相反,这将覆盖旧数据库模型的数据库属性属性
这反过来会导致您描述的错误,因为$\u GET['ModelClassName']
和$\u POST['ModelClassName']
通常包含数据数组
我想最简单的修复方法是直接调用setter函数来实现“normal”属性
行为,这将导致将上面提到的行替换为以下内容:
// in the controller
$model->setAttributes($_POST['ModelClassName']);
// and
$model->setAttributes($_GET['ModelClassName']);
我认为生成的CRUD代码(视图)的其余部分可以也应该保持不变,以使其正常工作。
如果您想知道这是如何工作的以及为什么工作的,最好对\uuu get
和\uu set
魔术函数做一些修改,以及它们在yii框架中的使用方式。如果它是单个表中的一列,您可以重命名它吗?我们需要查看生成此错误的代码。您应该能够在配置文件中打开错误日志,以便能够准确地看到它所指的文件/行号。