【问题标题】:CakePHP use wrong sequence name (PostgreSQL)CakePHP 使用错误的序列名称 (PostgreSQL)
【发布时间】:2013-02-04 14:26:39
【问题描述】:

当我尝试在 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(我无法更改数据库)。

【问题讨论】:

    标签: php postgresql cakephp sequence postgresql-9.1


    【解决方案1】:

    Postgres.php

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

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

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

    【讨论】:

    • 嗯,很有趣。其实我没有注意到。谢谢你,我的朋友。
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多