CakePHP вызывает seq.currval в Oracle, когда последовательности не существует - PullRequest
0 голосов
/ 08 июня 2011

При попытке вставить запись в таблицу я получаю ошибку последовательности:

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")
)

Я вручную добавляю оба идентификатора, используя:

$this->MyModel->set(array('work_id' => 1, 'item_id' => 2));
$this->MyModel->save();

Есть идеи, как предотвратить ошибку?Мне просто нужно сделать $this->MyModel->query() и выполнить запрос вручную?

Ответы [ 2 ]

1 голос
/ 09 июня 2011

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;
0 голосов
/ 18 ноября 2012

происходит то, что когда торт вызывает 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';
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...