2

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を変更するにはどうすればよいですか(データベースを変更できません)。

4

2 に答える 2

4

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';
    ...
}
于 2013-08-22T17:59:43.550 に答える
0

このエラーを修正する唯一の方法は、たとえば「nextval()」という名前の各モデルでアクションを作成し、デフォルトのPostgreSQLクエリを実行して次のシーケンスを取得することでした。

public function nextval() {
    $sql = "select nextval('transaction_num_seq') as nextval";
    $result = $this->query($sql);
    return $result[0][0]['nextval'];
}
于 2013-02-22T11:10:39.540 に答える