4

メッセージのステータス、つまりユーザーによる既読または未読を管理するために2つの列挙型フィールドを持つデータを保存する場合。列挙型( '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."'"
             );
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 をサポートしていません。あなたの場合、そもそも列挙型を使用することさえ間違っています。列挙型は 2 つ以上の状態に使用され、ArrayDatasource として、またはモデル内でエミュレートする必要があります (私のように)。

しかし、「既読/未読」はブール値です (2 つの明確な状態!)。

これを正しく行う簡単な方法があります。

tinyint(1) [unsigned] [default 0]

Cake はこれがブール値であると自動的に想定し、フォーム フィールドをチェックボックスに変換します。

于 2012-12-01T17:34:10.547 に答える