6

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

4

5 回答 5

6

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

看起来某处的某些方法正在将无效的列名传递给createInConditionCDbCommandBuilder 的方法。

参见第 722 行:https ://github.com/yiisoft/yii/blob/1.1.13/framework/db/schema/CDbCommandBuilder.php

查看调用该方法的几个实例,我猜您在某处有一个没有主键的数据库表。这是问题的一种可能解释。其他解释将需要您提供更多详细信息。

提供错误页面在调试模式下为您提供的堆栈跟踪以及表模式。

于 2013-01-11T04:05:13.393 回答
5

当您的表中没有主键并且您尝试进行更新时,就会发生这种情况。我遇到了这个问题,因为我的表中有一个复合主键。在我想更新模型之前,我在所有操作上都得到了很好的处理。

只需添加一个 int 主键,使用自动增量将其称为“id”到您的表中。它应该可以解决问题。

在测试之前,请务必禁用模式缓存(如果您正在使用它)。在您的架构缓存过期之前,更改不会生效。

于 2013-09-16T03:58:46.173 回答
4

也许你primary key的桌子上没有。如果你使用 $model->save() 方法保存或使用 $model->update() 方法($model 是 CActiveRecord 实例),你会得到这个错误。

因为 CActiveRecord 中的方法更新使用主键来更新(在这里阅读更多 )

源代码:framework/db/ar/CActiveRecord.php#1115

if($this->_pk===null)
        $this->_pk=$this->getPrimaryKey();
$this->updateByPk($this->getOldPrimaryKey(),$this->getAttributes($attributes));
$this->_pk=$this->getPrimaryKey();

您可以使用方法updateAll()代替update()updateByPk()

于 2014-04-11T07:47:01.840 回答
2

看看这个链接

http://www.yiiframework.com/forum/index.php/topic/3887-cdbexception-column-name-must-be-either-a-string-or-an-array/

您的表似乎没有 aprimary key或主键没有很好地恢复,这通常是由损坏的备份文件引起的。

于 2013-04-28T13:57:06.547 回答
0

如果您忘记添加返回值,您将显示错误。简单的例子,使用这种方法的模型将在 PK 上返回错误

...

public function relations()
{
}

...

您必须添加返回值。

/**
 * @return array
 */
public function relations()
{
    return array();
}

如果您不使用此类方法,则应删除它们,或添加“默认返回值”。否则,它会给出与主键或其他数据库问题相同的错误(因为模型读取无效数据并且并非所有应有的东西)。

于 2014-03-03T19:51:43.917 回答