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'.
在我的数据库中,我的 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'.