我真的很不知道该怎么做这个。在过去的 10 年里,我只是忍受了这个,但我认为是时候决定处理这个问题的正确方法了。
根据互联网,MySQL 不支持本机数据类型,这是有道理的,为什么每当我选择“BOOLEAN”时,我都会看到该列以 tinyint(1) 结尾。
我将数据存储为具有 1 或 0 值的 tinyint 没有问题,但是我确实有一个问题,即当我从数据库中选择具有此列的许多行时,我得到一个字符串“1”或“0”而不是PHP 本机布尔值 true/false。PHP 当然仍然可以将此变量作为布尔值处理,因为它似乎自动知道我想要它做什么,只要我做 == 0 或 == 1 甚至 == '0' 或 == '1' 如果我我真的觉得可以。
因此,我开始了,将这些数据运行到 PHP 的json_encode
函数中,并在我的 Backbone/Handlebars 实现进行 ajax 调用时输出它,并获得一个漂亮的 JSON 对象(通常其中包含许多行的数据):{"myVariable":"1"}
或这个{"myVariable":"0"}
。
我相信您可以在 Handlebars.js 中看到想要做这样的事情的问题:
{{#if myVariable}}
Do this
{{else}}
Do that
{{/if}}
现在,我真正不想做的是这样的事情:
<?php
for($i = 0; $i < count($recordSet); $i++) {
$recordSet[$i]['myVariable'] = (bool)$recordSet[$i]['myVariable'];
}
?>
由于我正在构建的应用程序在数据库中有数千列,因此我不能(或只需要)为我想要在我的 javascript 中像 bool 一样的每一列运行上面的代码。我真的不想这样做(尽管这可能是最简单的)
Handlebars.registerHelper('ifTrue', function(a, b) {
// Cast the compared value to a bool and then run a regular handlebars #if statement
});
有没有更好的办法?我正在使用代码点火器...可以以某种方式修改数据库类以检测 tinyint(1) 列并自动将其转换为布尔值,然后执行此操作直到 MySQL 支持真正的布尔值列?我知道他们正在计划,但是...