CActiveRecord更新没有主键的表的字段值时出错。

CActiveRecord更新没有主键的表的字段值时出错,报错Column name must be either a string or an array. 而同样的代码,并没有修改,只是给表设置了主键,运行正常。

修改之前的表结构:

CREATE TABLE [a] (

[str] nvarchar(50)

);

修改之后的表结构:

CREATE TABLE [a] (

[id] INTEGER NOT NULL primary key,

[str] nvarchar(50)

);

更新字段值的代码:

$A=A::model()->findByAttributes(array(‘str’=>‘b’));

$A->str=‘a test string’;

$A->save();

给你的AR class定义primaryKey()函数,返回主键名。具体参见CActiveRecord::primaryKey() API

那就是说AR操作的表一定是要设有主键的,没有主键就不行是吧?

对,如果你的表没有设主键,你就需要在AR class里声明。