php - Cakephp-3.x : How to change the data type of a selected alias?

标签 php cakephp casting cakephp-3.0 query-builder

当我尝试做的时候:

$fields = array('id' => 'custom_id', 'title' => 'some_name');

我得到的结果有 id 作为字符串。

如果我这样做:

$fields = array('custom_id', 'title' => 'some_name');

然后它将 custom_id 作为整数给出。

如何在不丢失数据类型的情况下获取 custom_id 作为 id。我阅读了文档,但没有找到太多帮助。

我认为虚拟领域可以做一些事情。但是是否可以在不使用虚拟字段等的情况下在查找查询中进行查询?

提前致谢

最佳答案

从 CakePHP 3.2 开始

您可以使用 Query::selectTypeMap() 添加更多类型,这些类型仅在检索数据时用于转换所选字段。

$query = $table
    ->find()
    ->select(['alias' => 'actual_field', /* ... */]);

$query
    ->selectTypeMap()
    ->addDefaults([
        'alias' => 'integer'
    ]);

您可以使用任何内置数据类型,也可以使用自定义数据类型。在这种情况下,alias 字段现在将转换为整数。

另见

使用 CakePHP 3.1 及更早版本

你必须使用Query::typeMap(),这不仅会在检索数据时影响所选字段,而且还会影响其他需要根据需要转换数据的地方字段类型,这可能会导致不必要的冲突,因此请谨慎使用。

$query
    ->typeMap()
    ->addDefaults([
        'alias' => 'integer'
    ]);

另见

更改现有列的类型

也可以更改表的现有列的​​类型,但是需要使用特定的语法来设置它们,即在 CakePHP 使用的列别名格式中,即表别名和列名由__,例如,对于具有 Articles 别名和名为 id 的列的表,它将是 Articles__id

这可以手动设置,或者更好的是通过 Query::aliasField() 检索,例如:

// $field will look like ['Alias__id' => 'Alias.id']
$field = $query->aliasField('id', $table->alias());

$query
    ->selectTypeMap()
    ->addDefaults([
        key($field) => 'string'
    ]);

这会将 id 列的默认类型更改为 string

另见

关于php - Cakephp-3.x : How to change the data type of a selected alias?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35650306/

相关文章:

PHP/MySQL 登录不工作

cakephp - datepicker Bootstrap 和 cakephp

cakephp - 如何按条件过滤关联模型?

algorithm - 幻灯片内容的校验和

c++ - 将 float 宏与 int* 一起切换 - 它有什么作用?

java:如何将变量从一种类型动态转换为另一种类型?

php - mysqli_connect() : (HY000/2002): Can't connect to local MySQL server through socket

php - 如何在 "woocommerce_thankyou"钩子(Hook)触发后将产品名称与其属性名称连接起来?

C++ 为模板类/结构设置自己的转换规则

php - jQuery 参数未传递给 PHP