我从前端发送一个值到后端,这个值是一个布尔值。在服务器上我这样做
dd($request);
我可以看到我收到的是真的,例如:
"displaySlug" => array:2 [
"type" => "boolean"
"name" => true
]
稍后当我遍历从页面获取的参数数组时,如下所示:
dump($key .': ' . $value['name'] .'; type: '.$value['type']);
现在打印出来:
"displaySlug: 1; type: boolean"
当我将其保存到DB时,它也会保存为数字而不是布尔值,它变为1。
$setting = new Setting();
$setting->key = $key;
$setting->type = $type;
$setting->value = $value;
$this->settings()->save($setting);
return true;
值是boolean存储为1的位置,我想将它存储为true,即使它只是db中的一个字符串
我希望它在db中是boolean。我该怎么做才能得到它布尔而不是数字?
我保存它的列是一个字符串列。
答案 0 :(得分:2)
在PHP中打印/转储布尔值时,它会被转换为字符串。
boolean TRUE 值会转换为string “1”。 Boolean FALSE 会转换为“”(空字符串)。这允许在boolean和string值之间来回转换。 1
你可以convert a string back to a boolean:
$value = (bool)$valueFromDatabase;
请记住:
转换为布尔值时,以下值被视为 FALSE
不是明确地转换为bool,而是可以使用truthy / falsey coersion of strings(有关更多信息,请参阅PHP type comparison tables)。
$valueFromDatabase= 0; //false
if (!$valueFromDatabase) { //0 is falsey, negated yields truthy expression
//action to take server-side when value is false
}
$dataForJSONOutput = array('value' => $valueFromDatabase);
//use this in Javascript code - e.g. VueJS
echo '<script type="text/javascript">var values = '.json_encode($dataForJSONOutput).'; </script>;
中的演示
1 <子> http://php.net/manual/en/language.types.string.php#language.types.string.casting 子> 2 <子> http://php.net/manual/en/language.types.boolean.php#language.types.boolean.casting 子>
答案 1 :(得分:2)
PHP不会将布尔值打印为"true"
或"false"
,而是自动将其转换为"1"
或""
(空字符串)。
MySQL BOOLEAN 数据类型本身不会将布尔值保存为true
/ false
,因为它是tinyint(1)
的别名。
BOOL,BOOLEAN
这些类型是TINYINT(1)的同义词。值为零被视为false。非零值被认为是真的
参考:MySQL Manual
在数据库中保存boolean作为字符串,php将值"false"
视为true
,因为它是非空字符串。
var_dump((boolean) "FALSE"); // bool(true)
var_dump((boolean) "TRUE"); // bool(true)
var_dump((boolean) ""); // bool(false)
阅读PHP Types Comparison以获取更多信息。
因此,在数据库中处理布尔值的一种更安全的方法是将其保存为数据库中1
/ 0
的整数值,并使用Attribute Casting进行转换。
答案 2 :(得分:1)
您不能在字符串中传递true布尔值。您在PHP中必须做的是在写入数据库之前将其转换为实际的true和false。但是,如果您的数据库字段设置为布尔数据类型,则放置0或1应该可以正常工作。
1/0 =真/假。
但是您可以在php中测试并说:$var
然后您可以将ng-show="feature.enabled"
写入记录。显然,您希望将其改编为您的代码结构,但您应该明白这一点。