如何拦截CakePHP 3中的检索字段?

问题描述 投票:-2回答:1

EDIT / CLARIFICATION:这个问题是询问将转换挂钩到CakePHP 3.x.我知道如何将bin转换为十六进制。问题是CakePHP 3.x模型结构中拦截和更改结果行的位置。

我将UUID数据存储为MySQL表中的varbinary(16)。这不是主键。当我读到这个字段时,我想在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;

请注意,我只是要求从数据库中读取数据。插入和更新工作正常。我想在读取时从二进制转换为字符串,我想我应该在Model层(表/实体)中这样做。

cakephp orm type-conversion cakephp-3.0
1个回答
0
投票

自定义数据库类型解决了这种情况。按照Custom data types的例子。谢谢@ndm的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.