Intereting Posts
Как получить URL-адрес открытых в данный момент вкладок во всех браузерах с помощью php или javascript? Как я могу распечатать документ результатов XSLT с удаленными исходными элементами? PHP – добавление прозрачного PNG в GIF динамически PHP: как вызвать функцию дочернего класса из родительского класса MySQL геопространственный поиск с использованием формулы haversine возвращает null в той же точке В PHP есть ли простой способ получить первую и последнюю дату месяца? удаление элемента массива JSON в PHP и повторное кодирование как JSON Symfony NelmioApiDocBundle swagger-ui PHP Аннотации объекта json с массивом свойств объектов, не показывающих Проблема с использованием DOTNET с PHP. Как анализировать синтаксис PHP в файле .html на сервере? Пользовательская вспышка CakePHP для loginError Laravel Сырой запрос paginate; необработанный запрос к красноречивому объекту Как добавить OpenID на сайт php? PHP Array – скобки Получить текущий домен

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::selectTypeMap() выбранных полей при извлечении данных.

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

Вы можете использовать любые встроенные типы данных, а также пользовательские. В этом случае поле alias теперь будет отлито в виде целого числа.

Смотрите также

  • API> \ Cake \ Database \ Query :: selectTypeMap ()
  • Cookbook> Доступ к базе данных и ORM> Основы баз данных> Типы данных
  • Cookbook> Доступ к базе данных и ORM> Основы баз данных> Добавление пользовательских типов

С 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 ()

Привет, мой альтернативный пример, полная, пользовательская схема () в контроллере Пользователи добавляют псевдонимы столбцов типа 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();