【发布时间】:2018-06-02 09:00:09
【问题描述】:
编辑/澄清:这个问题是询问在哪里挂钩到 CakePHP 3.x 的转换。我知道如何将 bin 转换为十六进制。问题是,在 CakePHP 3.x 模型结构中,在哪里截取和更改结果行。
我将 UUID 数据作为 varbinary(16) 存储在 MySQL 表中。这不是主键。当我阅读此字段时,我希望将其转换为 PHP 中的标准 36 个字符的字符串(插入连字符的二进制到十六进制)。在 CakePHP 2.x 中我会使用 afterFind() 回调。 CakePHP 3.x 文档提到use Map/Reduce,但这意味着在代码中定位每个 find()。似乎我应该能够在模型中完成此操作,也许作为 CakePHP 3 行为。
表格如下所示:
create table `books` (
`id` int(10) unsigned not null auto_increment,
`my_uuid` varbinary(16) not null,
`created` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id`),
) engine=InnoDB;
请注意,我只是询问有关从数据库中读取的信息。插入和更新工作正常。我想在读取时从二进制转换为字符串,我认为我应该在模型层(表/实体)中这样做。
【问题讨论】:
-
@Sammitch 那么有没有办法表达这个问题以明确它不是关于在 PHP 中执行二进制字符串?这是关于在 CakePHP 3 中找到合适的地方。
-
要么使用自定义数据库类型(顺便说一句,为什么是 VARBINARY?),要么使用结果格式化程序,后者可以应用于模型
beforeFind事件。 stackoverflow.com/questions/32260229/… / github.com/cakephp/cakephp/blob/3.5.8/src/Database/Type/… -
@ndm MySQL 8 将 UUID 值记录为存储的 varbinary(16):dev.mysql.com/doc/refman/8.0/en/…
标签: cakephp orm type-conversion cakephp-3.0