Я ноб в трюфеле. Работа над проектом с открытым исходным кодом. Проблема заключается в следующем:
Когда я вставляю значение для определенной таблицы («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. Я застрял в течение трех дней. Вещи, которые я проверил:
Нет значения по умолчанию для db для is_adjusted.
Никакая другая функция не перезаписывает это поле.
*** 1. Предмет вознаграждения выглядел довольно необычно для меня. Название свойства грязное. Я все еще изучаю это. Но на данный момент мне кажется, что структура объектов dc-cakephp-db.
Это дизайн 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 как логические