Cakephp: при вставке поля tinyint. Получение только «0» или «1»

Я ноб в трюфеле. Работа над проектом с открытым исходным кодом. Проблема заключается в следующем:

Когда я вставляю значение для определенной таблицы («is_adjusted» (tinyint)), мой PHP-код выполняется успешно. Но таблица принимает только 0 или 1, поскольку это значение. Образец кода :

$reward = $ta_customer_reward->newEntity(); $string_reward = var_export($reward, true); $reward->customer_email = $some_preset_xyz; $reward->reward_amount = $some_preset_xyz;; $reward->particulars = $some_preset_xyz; .. .. .. // This is_adjusted is the culprit. $reward->is_adjusted = 2; $reward = $ta_customer_reward->save($reward); 

Теперь, когда я сохраняю (вставляю) это в db, это сохраняется как 1. Я застрял в течение трех дней. Вещи, которые я проверил:

  1. Нет значения по умолчанию для db для is_adjusted.

  2. Никакая другая функция не перезаписывает это поле.

*** 1. Предмет вознаграждения выглядел довольно необычно для меня. Название свойства грязное. Я все еще изучаю это. Но на данный момент мне кажется, что структура объектов dc-cakephp-db.

  1. Это cakephp v 3. xyz ***

Это дизайн CakePHP. CakePHP всегда видит tinyint(1) как boolean, поэтому он всегда будет преобразовывать ваше значение в true / false следовательно, 0 .

Чтобы преодолеть эту проблему, используйте tinyint(2) вместо вашего типа столбца. Не забудьте очистить кеш модели.


Документация типа данных CakePHP:
http://book.cakephp.org/3.0/en/orm/database-basics.html#data-types

Сообщение в блоге об этом:
http://blog.room34.com/archives/2649

Похожие вопросы и ответы:
CakePHP и tinyint как логические