如何拦截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中的检索字段?的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 3:如何在一次查询中统计和检索不同时期的数据?

Cakephp 从另一个视图中检索 id

如何从片段中检索gridview中的图像?

CakePHP 3“包含”不检索“属于”

如何在cakephp 3中获取数据表搜索键?

Cakephp 1.3:如何迁移到我的文章标签 - 功能