3

私は CakePHP アプリを開発しています。アプリケーションは複数のデータベースに分散されるため、UUID を主キーとして使用したいと考えています。また、CakePHP 2.1 の統合 ACL フレームワークも利用したいと考えています。

私はチュートリアルに従って進んでおり、 DBスキームを次のように変更しました

CREATE TABLE acos (
  id uuid NOT NULL,
  parent_id uuid DEFAULT NULL,
  model VARCHAR(255) DEFAULT '',
  foreign_key uuid DEFAULT NULL,
  alias VARCHAR(255) DEFAULT '',
  lft uuid DEFAULT NULL,
  rght uuid DEFAULT NULL,
  PRIMARY KEY  (id)
);

CREATE TABLE aros_acos (
  id uuid NOT NULL,
  aro_id uuid NOT NULL,
  aco_id uuid NOT NULL,
  _create CHAR(2) NOT NULL DEFAULT 0,
  _read CHAR(2) NOT NULL DEFAULT 0,
  _update CHAR(2) NOT NULL DEFAULT 0,
  _delete CHAR(2) NOT NULL DEFAULT 0,
  PRIMARY KEY(id)
);

CREATE TABLE aros (
  id uuid NOT NULL,
  parent_id uuid DEFAULT NULL,
  model VARCHAR(255) DEFAULT '',
  foreign_key uuid DEFAULT NULL,
  alias VARCHAR(255) DEFAULT '',
  lft uuid DEFAULT NULL,
  rght uuid DEFAULT NULL,
  PRIMARY KEY  (id)
);

しかし、今私はエラーが発生しています:

エラー: SQLSTATE[42883]: 未定義の関数: 7 エラー: 関数 max(uuid) が存在しません 行 1: SELECT MAX("Aro"."rght") AS "rght" FROM "public"."aros" AS ". .. ^ ヒント: 指定された名前と引数の型に一致する関数はありません. 明示的な型キャストを追加する必要があるかもしれません.

CakePHP のバージョンは 2.1.0-beta で、UUID データ型の PostgreSQL を使用しています。

UUID で CakePHP ACL フレームワークをうまく使用した人はいますか? このアプリの将来のサポートのために、CakePHP フレームワークの最小限の変更でこれを機能させたいと考えています。

4

1 に答える 1

1

データ型max()に対して定義された集約関数がありません。いいえは、他の よりも「大きい」と見なされます。UUIDUUIDUUID

次のデモを検討してください。

CREATE TEMP TABLE t(id uuid);
INSERT INTO t VALUES
 ('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11')
,('b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11');

SELECT max(id) FROM t;

収量:

ERROR:  function max(uuid) does not exist
LINE 1: SELECT max(id) FROM t;
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

問題を回避できます。idアルファベット順で最大の値が必要な場合は、テキストにキャストします。

SELECT max(id::text) FROM t;

収量:

b0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

ただし、これはUUIDの標準的なテキスト表現にすぎないことに注意してください。同じ UUID を他の多くの形式で表すことができます。

于 2012-02-02T23:53:21.833 に答える