当尝试将记录插入表中时,我收到序列错误:
Query: SELECT my_table_seq.currval FROM dual
Warning (512): SQL Error: ORA-02289: sequence does not exist
此表上没有序列。它更像是HABTM。我有一张桌子:
CREATE TABLE "MYSCHEMA"."MY_TABLE"
(
"WORK_ID" NUMBER NOT NULL ENABLE,
"ITEM_ID" NUMBER NOT NULL ENABLE,
CONSTRAINT "MY_TABLE_PK" PRIMARY KEY ("WORK_ID", "ITEM_ID")
)
我使用以下方法手动添加两个ID:
$this->MyModel->set(array('work_id' => 1, 'item_id' => 2));
$this->MyModel->save();
任何想法如何防止错误?我只需要$this->MyModel->query()
并手动运行查询吗?
答案 0 :(得分:1)
CakePHP期望连接表(作为HABTM关系的一部分)具有自己的主键。
请参阅http://book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM
在你的情况下:
CREATE TABLE MY_TABLE
(
ID NUMBER NOT NULL,
WORK_ID NUMBER NOT NULL,
ITEM_ID NUMBER NOT NULL,
CONSTRAINT MY_TABLE_PK PRIMARY KEY (ID),
CONSTRAINT MY_TABLE_UK UNIQUE (WORK_ID, ITEM_ID)
)
不要忘记添加MY_TABLE_SEQ序列:
CREATE SEQUENCE MY_TABLE_SEQ;
答案 1 :(得分:0)
当cake调用oracle表的lastinsertid时,它会查询该表的序列。如果没有提供序列,它只假定$ tablename + _seq。
你可以做的是告诉模板上的cakephp你用于该表的顺序是什么。
MyModel.php
class MyModel extends AppModel{
//in my case
//my table name was so long it required a shorter sequence name :D
var $sequence = 'my_table_seq';
...
}