Cakephp:插入tinyint字段时。只获得" 0"或" 1"

时间:2016-04-05 11:41:19

标签: php mysql cakephp

我是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.我被困了三天。我检查过的事情:

  1. 对于is_adjusted,db中没有默认值。

  2. 没有其他功能覆盖该字段。

  3. *** 1.奖励对象看起来很不寻常。有一个属性名称脏。我还在研究这个。但就目前而言,我认为这是一些cakephp db对象结构。

    1. 这是cakephp v 3. xyz ***

1 个答案:

答案 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

类似问答A:
CakePHP and tinyint as boolean

相关问题