CakePHP - 获取数据,检查TRUE / FALSE

时间:2015-09-10 21:09:04

标签: mysql cakephp bit

在我的数据库中,我的表格具有以下结构:

CREATE TABLE `tbl_app_versions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `app` varchar(100) DEFAULT NULL,
  `version` varchar(50) DEFAULT NULL,
  `force_update` bit(1) DEFAULT NULL,
  `is_active` bit(1) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

请注意' force_update'有点。它可以是1或0。

在我的代码中,我获取数据并想要查看值是1还是0.由于某种原因,CakePHP会在以下两种情况下返回以下内容:

Array
(
    [0] => Array
        (
            [Platforms] => Array
                (
                    [id] => 1
                    [app] => ios
                    [version] => 1.0.042
                    [force_update] => 
                    [is_active] => 
                    [created] => 
                    [modified] => 
                )

        )

    [1] => Array
        (
            [Platforms] => Array
                (
                    [id] => 2
                    [app] => android
                    [version] => 1.0.041
                    [force_update] => 
                    [is_active] => 
                    [created] => 
                    [modified] => 
                )
        )
)

无论它的值如何,force_update都显示相同的值。我在大部分牌桌上都使用了比特,我必须能够做这个检查。

此:

<?php echo ($value['Platforms']['force_update']) ? 'Yes' : 'No'; ?>

或者:

<?php echo ($value['Platforms']['force_update'] = TRUE) ? 'Yes' : 'No'; ?>

或者:

<?php echo ($value['Platforms']['force_update'] == TRUE) ? 'Yes' : 'No'; ?>
尽管我的数据是:

,但所有结果都相同
'1', 'ios', '1.0.042', '0', '1', NULL, NULL
'2', 'android', '1.0.041', '1', '1', NULL, NULL

2 个答案:

答案 0 :(得分:0)

在数据库中使用bit时,如果field为NULL,则返回FALSE,否则返回TRUE。

因此,如果它在字段(1或0)中有任何值,它仍然返回TRUE。

解决方案: 将字段从bit更改为tinyint。 要么 在数据操作上,以FALSE为单位对该字段进行NULL,并为其赋予一个TRUE值。这样每次我读取数据时它都是NULL或有值,然后根据它我可以在视图中显示正确的消息。

答案 1 :(得分:0)

你可以从bit切换到tinyint(1),但我认为你的if语句是错误的。

尝试

<?php echo (!empty($value['Platforms']['force_update'])) ? 'Yes' : 'No'; ?>

empty()将捕获botch NULL和0作为&#39; No&#39;只有1作为&#39;是&#39;。