Php 列名必须是字符串或数组yii
我在访问yii的web应用程序时遇到一些问题。我的配置与所有者的设置相同,但在尝试访问时,出现了一个错误“列必须是字符串或数组”。我该怎么解决呢?提前谢谢 报告错误消息时,有助于获得准确的错误消息。实际的错误消息是:“Columnname必须是字符串或数组”。使用一个精确的字符串,您可以搜索框架文件以找到提到它的位置 看起来某个方法正在向CDbCommandBuilder的Php 列名必须是字符串或数组yii,php,yii,Php,Yii,我在访问yii的web应用程序时遇到一些问题。我的配置与所有者的设置相同,但在尝试访问时,出现了一个错误“列必须是字符串或数组”。我该怎么解决呢?提前谢谢 报告错误消息时,有助于获得准确的错误消息。实际的错误消息是:“Columnname必须是字符串或数组”。使用一个精确的字符串,您可以搜索框架文件以找到提到它的位置 看起来某个方法正在向CDbCommandBuilder的createInCondition方法传递无效的列名 见第722行: 看看调用该方法的两个实例,我猜您有一个没有主键的数据库
createInCondition
方法传递无效的列名
见第722行:
看看调用该方法的两个实例,我猜您有一个没有主键的数据库表。这是问题的一种可能解释。其他的解释需要你提供更多的细节
提供错误页面在调试模式下提供的堆栈跟踪以及表架构。查看此链接
您的表似乎没有
主键
,或者主键没有很好地恢复,这通常是由于备份文件损坏造成的 当您的表中没有主键并且尝试执行更新时,就会发生这种情况。我遇到这个问题是因为我的表中有一个复合主键。在我想更新一个模型之前,我在所有操作中都得到了很好的处理
只需添加一个int主键,使用自动增量将其称为“id”。它应该会起作用
在测试之前,请确保禁用模式缓存(如果正在使用)。直到架构缓存过期,更改才会生效 如果您忘记添加返回值,您将显示错误。举个简单的例子,使用这种方法的模型将在PK时返回错误
...
public function relations()
{
}
...
您必须添加返回值
/**
* @return array
*/
public function relations()
{
return array();
}
如果不使用这些方法,则应删除它们,或添加“默认返回值”。否则,它会给出与主键相同的错误或其他DB问题(因为模型读取无效数据,并且没有它应该读取的所有内容)。可能您的表中没有主键。如果使用方法$model->save()保存或使用方法$model->update()($model是CActiveRecord实例),则会出现此错误 因为该方法在CActiveRecord中使用主键进行更新(请阅读更多信息) ) 源代码:framework/db/ar/CActiveRecord.php#1115
您可以使用方法
updateAll()
而不是update()
或updateByPk()
谢谢您的回复,Willem。我尝试了你的建议来定义模型的主键,但没有成功。然后我尝试了这个解决方案[link],但错误消息变成了“尝试获取非对象的属性”。你能建议再帮我一个忙吗?ThanksI把id列作为索引而不是主索引,改为主索引,问题就解决了。哈哈,真不敢相信。5年后发现了我自己的评论:D
if($this->_pk===null)
$this->_pk=$this->getPrimaryKey();
$this->updateByPk($this->getOldPrimaryKey(),$this->getAttributes($attributes));
$this->_pk=$this->getPrimaryKey();