Когда я пытаюсь сделать:
$fields = array('id' => 'custom_id', 'title' => 'some_name');
Результат, который я получаю, имеет id
как строку.
Если я сделаю:
$fields = array('custom_id', 'title' => 'some_name');
то он дает custom_id
как целое.
Как я могу получить custom_id
как id
без потери типа данных. Я прочитал документацию, но не нашел большой помощи.
Я думаю, что виртуальные поля могут делать. Но возможно ли это внутри запроса на поиск без использования виртуальных полей и т. Д.?
Заранее спасибо
вы можете использовать Query::selectTypeMap()
для добавления дополнительных типов, которые будут использоваться только для Query::selectTypeMap()
выбранных полей при извлечении данных.
$query = $table ->find() ->select(['alias' => 'actual_field', /* ... */]); $query ->selectTypeMap() ->addDefaults([ 'alias' => 'integer' ]);
Вы можете использовать любые встроенные типы данных, а также пользовательские. В этом случае поле alias
теперь будет отлито в виде целого числа.
Смотрите также
вам придется использовать 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
.
Смотрите также
Привет, мой альтернативный пример, полная, пользовательская схема () в контроллере Пользователи добавляют псевдонимы столбцов типа type по данным объединения:
$this->Users->schema() ->addColumn('is_licensed', [ 'type' => 'boolean', ]) ->addColumn('total_of_licenses', [ 'type' => 'integer', ]); $fields = [ 'Users.id', 'Users.username', 'Users.first_name', 'Users.last_name', 'Users.active', 'Users__is_licensed' => 'if(count(LicenseesUsers.id)>=1,true,false)', 'Users__total_of_licenses' => 'count(LicenseesUsers.id)', 'Users.created', 'Users.modified', 'Languages.id', 'Languages.name', 'Countries.id', 'Countries.name', 'UserRoles.id', 'UserRoles.name', ]; $where = [ 'contain' => ['UserRoles', 'Countries', 'Languages'], 'fields' => $fields, 'join' => [ 'LicenseesUsers' => [ 'table' => 'licensees_users', 'type' => 'LEFT', 'conditions' => [ 'Users.id = LicenseesUsers.users_id' ], ], ], 'group' => 'Users.id' ]; // Set pagination $this->paginate = $where; // Get data in array $users = $this->paginate($this->Users)->toArray();