Cakephp + enum支持:无法保存或选择枚举0和1

时间:2012-12-01 13:20:30

标签: cakephp enums

当我保存具有两个枚举字段的数据时,设法管理消息的状态,即用户读取或未读取。我使用枚举('1','0')来管理状态'1'=>读和'0'=>未读

以下代码将保存邮件,但在状态栏中保存空文件

$data = array(
              'message' => 'test message',
              'status' => 1
             );

$this->Message->save($data);

数据库结构如下

Field                Type                  Collation          Null    Key     Default 
------------------  -------------        -----------------  ------  ------  -------  
id                   bigint(20)            (NULL)             NO      PRI     (NULL)   
message              varchar(255)          (NULL)             NO      MUL     (NULL)                                                         
status               enum('0','1')         latin1_swedish_ci  NO      MUL     0 

即使我已将数据数组用作

$data = array(
              'message' => 'test message',
              'status' => '1'
             );


$data = array(
              'message' => 'test message',
              'status' => "'".1."'"
             );

2 个答案:

答案 0 :(得分:4)

在MySql文档之外,请说明以下内容: "如本节后面所述 - 我们强烈建议您不要使用数字作为枚举值"

http://dev.mysql.com/doc/refman/5.0/en/enum.html

答案 1 :(得分:4)

您正在使用cakephp - 它(如文档所述)不支持ENUM。 在你的情况下,首先使用枚举是错误的。枚举用于两种以上的状态,应该模拟为ArrayDatasource或模型(就像我一样)。

但是“read / unread”是一个布尔值(两个确定的状态!)。

并且有一种简单的方法可以正确地完成此任务:

tinyint(1) [unsigned] [default 0]

cake会自动假设这是一个布尔值,并将其表单字段转换为一个复选框。