4

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

以下代码将保存消息,但在状态列中保存空字段

$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."'"
             );
4

2 回答 2

4

就在 MySql Docs 中,声明如下:“如本节后面所述 - 我们强烈建议您不要使用数字作为枚举值”

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

于 2012-12-01T15:52:57.273 回答
4

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

但是“已读/未读”是一个布尔值(两个明确的状态!)。

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

tinyint(1) [unsigned] [default 0]

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

于 2012-12-01T17:34:10.547 回答