我正在开发一个CakePHP应用程序,我想使用UUID作为主键,因为应用程序将分布在多个数据库中,我也想利用集成ACL框架在CakePHP的2.1CakePHP ACL与UUID主键
我根据the tutorial去,我已经修改了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错误:好玩ction max(uuid)不存在LINE 1:SELECT MAX(“Aro”。“rght”)AS“rght”FROM“public”。“aros”AS“... ^提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
CakePHP的版本是2.1.0-beta,我使用PostgreSQL和UUID数据类型。
有没有人成功使用CakePHP ACL框架与UUID?我希望通过CakePHP框架中的最小修改来实现此功能,以便将来支持此应用程序。
嗯,我知道,为什么它失败了,但我在CakePHP ACL框架中寻找最简单的方法,所以我不必创建自己的“排序ACL框架”。但是,将类型改为“字符(36)”会使代码无误地出现,尽管现在的问题是,如果它仍然在运行,那么你是对的。 – Marek 2012-02-03 06:51:13
@Marek我不会改变数据类型。问题是,为什么你需要最大的UUID?如果这样做,只能将值计算为计算值。你也可以编写自己的聚合函数'max(uuid)'。 – 2012-02-03 16:46:00