我是cakephp中的菜鸟。在开源项目上工作。问题是:
当我为某个表插入一个值(" 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.我被困了三天。我检查过的事情:
对于is_adjusted,db中没有默认值。
没有其他功能覆盖该字段。
*** 1.奖励对象看起来很不寻常。有一个属性名称脏。我还在研究这个。但就目前而言,我认为这是一些cakephp db对象结构。
答案 0 :(得分:2)
这是CakePHP的设计。 CakePHP始终将tinyint(1)
视为布尔值,因此它总是将您的值转换为true
/ false
,因此1
/ 0
。
要解决此问题,请使用tinyint(2)
代替列类型。请记住清除模型缓存!
CakePHP数据类型文档:
http://book.cakephp.org/3.0/en/orm/database-basics.html#data-types
关于此事的博文:
http://blog.room34.com/archives/2649