CakePHP使用错误的序列名称(PostgreSQL)

时间:2013-02-19 19:06:34

标签: php postgresql cakephp sequence postgresql-9.1

当我尝试在Postgres表中保存一些信息时,CakePHP会为我返回此错误:

array(
    (int) 0 => '[PDOException] SQLSTATE[42P01]: Undefined table: 7 ERRO:  relação "public.cashier_transaction_transaction_num_seq" não existe
Request URL: /www/cashiers/open
Stack Trace:

但是CakePHP是正确的:这个序列不存在。正确的序列是 transaction_num_seq

如何更改 IN CAKE (我无法更改数据库)。

2 个答案:

答案 0 :(得分:4)

描述($ model)函数在 Postgres.php

中似乎使用了一个未记录的可选属性
if (isset($model->sequence)) {
    $this->_sequenceMap[$table][$model->primaryKey] = $model->sequence;
}

使用它,就像这样,指定表的主键的顺序。

public class YourModel extends AppModel {
    public $sequence = 'public.foobar_seq';
    ...
}

答案 1 :(得分:0)

我发现修复此错误的唯一方法是在每个名为“nextval()”的模型中创建一个操作,并运行默认的PostgreSQL查询以获取下一个序列。

public function nextval() {
    $sql = "select nextval('transaction_num_seq') as nextval";
    $result = $this->query($sql);
    return $result[0][0]['nextval'];
}