编程语言
首页 > 编程语言> > Cakephp-3.x:如何更改所选别名的数据类型?

Cakephp-3.x:如何更改所选别名的数据类型?

作者:互联网

我试着这样做:

$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'
    ]);

您可以使用任何内置数据类型以及自定义数据类型.在这种情况下,别名字段现在将被转换为整数.

也可以看看

> API > \Cake\Database\Query::selectTypeMap()
> Cookbook > Database Access & ORM > Database Basics > Data Types
> Cookbook > Database Access & ORM > Database Basics > Adding Custom Types

使用CakePHP 3.1及更早版本

你将不得不使用Query :: typeMap(),它不仅会在检索数据时影响所选字段,而且还会在其他各种地方根据字段类型对数据进行转换,这可能会导致不必要的冲突,所以要小心使用.

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

也可以看看

> API > \Cake\Database\Query::typeMap()

更改现有列的类型

也可以更改表的现有列的​​类型,但是需要使用特定语法设置它们,即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.

也可以看看

> API > \Cake\Datasource\QueryInterface::aliasField()

标签:query-builder,php,casting,cakephp,cakephp-3-0
来源: https://codeday.me/bug/20190918/1811356.html