Ash*_*ary 2 php casting cakephp query-builder cakephp-3.0
我试着这样做:
$fields = array('id' => 'custom_id', 'title' => 'some_name');
Run Code Online (Sandbox Code Playgroud)
我得到的结果id
是一个字符串.
如果我做:
$fields = array('custom_id', 'title' => 'some_name');
Run Code Online (Sandbox Code Playgroud)
然后它给出custom_id
整数.
如何custom_id
在id
不丢失数据类型的情况下获得.我阅读了文档,但没有找到太多帮助.
我认为虚拟领域可以做些什么.但是在查询查询中是否可以不使用虚拟字段等?
提前致谢
您可以使用它Query::selectTypeMap()
来添加更多类型,这些类型仅在检索数据时用于转换选定的字段.
$query = $table
->find()
->select(['alias' => 'actual_field', /* ... */]);
$query
->selectTypeMap()
->addDefaults([
'alias' => 'integer'
]);
Run Code Online (Sandbox Code Playgroud)
您可以使用任何内置数据类型以及自定义数据类型.在这种情况下,该alias
字段现在将被转换为整数.
也可以看看
您将不得不使用Query::typeMap()
,这不仅会在检索数据时影响所选字段,而且在其他各种地方也需要根据字段类型进行数据转换,这可能会导致不必要的冲突,因此请谨慎使用.
$query
->typeMap()
->addDefaults([
'alias' => 'integer'
]);
Run Code Online (Sandbox Code Playgroud)
也可以看看
也可以更改表的现有列的类型,但是需要使用特定语法设置它们,即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'
]);
Run Code Online (Sandbox Code Playgroud)
这会将id
列的默认类型更改为string
.
也可以看看