当数据表存在非NUMBER的主键时,AR类还能不能用 [ 新手入门 ]
当数据库表本身存在主键索引,并且主键索引不是number类型,例如char或varchar2 这个时候通过activerecord类来对数据表进行insert,update等操作时,就会出现报错,无法进行下去。 如何解决这个问题?必须要删除数据表的主键索引吗?
共 4 条回复
-
另外可能就是你的url route需要改
'urlManager'=>array( 'showScriptName'=>false, // enable this when .htaccess takes effect on the host 'urlFormat'=>'path', 'rules'=>array( '<controller:\w+>/<id:\d+>'=>'<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', '<controller:\w+>/<action:\w+>/<view:\w+>/*'=>'<controller>/<action>', '<controller:\w+>/<action:\w+>/<lang:\w+>'=>'<controller>/<action>', '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', ), ),
<id:\d+>
改成比如<pk:\w+>
-
我还是一个初学者,操作步骤如下
1.我创建了一张表,4个字段create table test ( tableid CHAR(32) default sys_guid() not null, uname VARCHAR2(50) not null, rdindex NUMBER not null, rdflag NUMBER default 1 not null )
其中tableid为主键索引
2.通过yii的界面,自动生成数据库表的model文件,TEST.php
。
3.我写了一段对这张表操作的简单代码$db =new TEST(); $value=array( 'uname'=>'abc','rdindex'=>1 ); $db->attributes=$value; $db->insert();
接着就是报错了,先报错说,指向insert方法中的这一句
throw new CDbException(Yii::t('yii','The active record cannot be inserted to database because it is not new.'));
把数据表的主键索引去除了,然后在自动生成的TEST.php类里把tableid字段加上,解决这个报错。
然后报数据类型不对的错误。就是数据表字段rdflag默认为1,系统取回来变成了'1',
在$value
数组中加入rdflag=>1
,才算通过。
结果存入数据表中tableid字段的值为'sys_guid()'
真的让人很无语。。。。。。
myron_mao 上海
注册时间:2012-01-17
最后登录:2024-03-12
在线时长:29小时45分
最后登录:2024-03-12
在线时长:29小时45分
- 粉丝3
- 金钱4710
- 威望0
- 积分5000