【问题标题】:How do I intercept retrieved field in CakePHP 3?如何在 CakePHP 3 中截获检索到的字段?
【发布时间】: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;

请注意,我只是询问有关从数据库中读取的信息。插入和更新工作正常。我想在读取时从二进制转换为字符串,我认为我应该在模型层(表/实体)中这样做。

【问题讨论】:

标签: cakephp orm type-conversion cakephp-3.0


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多