Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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
Php 列名必须是字符串或数组yii_Php_Yii - Fatal编程技术网

Php 列名必须是字符串或数组yii

Php 列名必须是字符串或数组yii,php,yii,Php,Yii,我在访问yii的web应用程序时遇到一些问题。我的配置与所有者的设置相同,但在尝试访问时,出现了一个错误“列必须是字符串或数组”。我该怎么解决呢?提前谢谢 报告错误消息时,有助于获得准确的错误消息。实际的错误消息是:“Columnname必须是字符串或数组”。使用一个精确的字符串,您可以搜索框架文件以找到提到它的位置 看起来某个方法正在向CDbCommandBuilder的createInCondition方法传递无效的列名 见第722行: 看看调用该方法的两个实例,我猜您有一个没有主键的数据库

我在访问yii的web应用程序时遇到一些问题。我的配置与所有者的设置相同,但在尝试访问时,出现了一个错误“列必须是字符串或数组”。我该怎么解决呢?提前谢谢

报告错误消息时,有助于获得准确的错误消息。实际的错误消息是:“Columnname必须是字符串或数组”。使用一个精确的字符串,您可以搜索框架文件以找到提到它的位置

看起来某个方法正在向CDbCommandBuilder的
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();