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

CakePHP - Fetching data, checking against TRUE/FALSE

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

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 returns 在任何一种情况下都会执行以下操作:

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 都显示相同的值。我在我的大部分 table 中都使用了 bit,我必须能够进行此检查。

这个:

<?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

在数据库中使用位时,如果字段为NULL,则returns FALSE,否则returns TRUE。

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

解决方法: 将字段从 bit 更改为 tinyint。 要么 在数据操作中,根据 FALSE 将字段设为 NULL,并根据 TRUE 为其赋值。这样,每次我读取数据时,它要么为 NULL,要么有一个值,然后基于此我可以在视图中显示正确的消息。

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

尝试

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

empty() 将捕获拙劣的 NULL 和 0 作为 'No' 并且只有 1 作为 'yes'.