Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii CActiveRecord,列名为;属性“;_Yii_Attributes_Cactiverecord - Fatal编程技术网

Yii CActiveRecord,列名为;属性“;

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实例

我使用了遗留数据库中的CRUD生成器。搜索列值时,出现以下错误:

htmlspecialchars()要求参数1是字符串,数组给定(/usr/local/share/yii/framework/web/helpers/CHtml.php:103)

问题在于,该模型有一个名为“attributes”的现有列,该列正在创建冲突。我从_search.php中删除了这个条目,并注释掉了模型中的所有实例,希望至少能让它工作起来,但运气不好。如有任何建议,将不胜感激


谢谢。

每个
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框架中的使用方式。

如果它是单个表中的一列,您可以重命名它吗?我们需要查看生成此错误的代码。您应该能够在配置文件中打开错误日志,以便能够准确地看到它所指的文件/行号。