WHen i try to do :
$fields = array('id' => 'custom_id', 'title' => 'some_name');
The result I get has id
as a string.
If I do:
$fields = array('custom_id', 'title' => 'some_name');
then it gives custom_id
as integer.
How can I obtain custom_id
as id
without loosing the data type. I read the documentation but didn't found much help.
There is something that virtual fields can do I think. But is it possible inside the find query without the use of virtual fields etc?
Thanks in Advance
Hi my alternative example full, user schema() in controller Users add type column aliasFiels by join data:
As of CakePHP 3.2
you can use
Query::selectTypeMap()
to add further types, which are only going to be used for casting the selected fields when data is being retrieved.You can use any of the built-in data types, as well as custom ones. In this case the
alias
field will now be casted as an integer.See also
With CakePHP 3.1 and earlier
you'll have to use
Query::typeMap()
, which will not only affect the selected field when data is being retrieved, but in various other places too where data needs to be casted according to the field types, which might cause unwanted collisions, so use this with care.See also
Change the type of existing columns
Changing the type of an existing column of a table is possible too, however they need to be set using a specific syntax, ie in the column alias format used by CakePHP, that is, the table alias and the column name seprated by
__
, eg, for a table with theArticles
alias and a column namedid
, it would beArticles__id
.This can be either set manually, or better yet retrieved via
Query::aliasField()
, like:This would change the the default type of the
id
column tostring
.See also