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

4
当我保存两个枚举字段来管理用户读取或未读取的消息状态时,我使用枚举('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."'"
             );

使用布尔类型('bool')不可行吗? - Daniel
1
感谢您的回复 Tim Joyce、mark 和 Daniel。我无法更改数据库模式,因为同一数据库用于创建 iPhone 和 Android 应用程序的 Web 服务。 - Subodh Ghulaxe
2个回答

4
你正在使用CakePHP - 正如文档所述,它不支持ENUM。在你的情况下,甚至使用枚举都是错误的。枚举用于超过两个状态的情况,并应被模拟为ArrayDatasource或在你的模型中(就像我所做的那样)。
但是,“已读/未读”是一个布尔值(两种确定的状态!)。
有一种简单的方法可以正确地完成这个任务:
tinyint(1) [unsigned] [default 0]

cake会自动将其视为布尔值,并将表单字段转换为复选框。


嗨马克,你介意解释一下或者和我分享一下如何模拟“ArrayDatasource”吗?这听起来是一个不错的方法。 - Luke
这里有一个链接 [http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/],主要适用于2.x版本的CakePHP。同时也可以在[awesome list](https://github.com/FriendsOfCake/awesome-cakephp)中找到3.x版本的相关内容。 - mark

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接