如何拦截CakePHP 3中的检索字段?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何拦截CakePHP 3中的检索字段?相关的知识,希望对你有一定的参考价值。
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层(表/实体)中这样做。
答案
自定义数据库类型解决了这种情况。按照Custom data types的例子。谢谢@ndm的解决方案。
以上是关于如何拦截CakePHP 3中的检索字段?的主要内容,如果未能解决你的问题,请参考以下文章