服务器上的vuejs中的boolean变为1

时间:2017-07-27 22:30:32

标签: javascript php laravel boolean

我从前端发送一个值到后端,这个值是一个布尔值。在服务器上我这样做

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。我该怎么做才能得到它布尔而不是数字?

我保存它的列是一个字符串列。

3 个答案:

答案 0 :(得分:2)

在PHP中打印/转储布尔值时,它会被转换为字符串。

  

boolean TRUE 值会转换为string “1”Boolean FALSE 会转换为“”(空字符串)。这允许在booleanstring值之间来回转换。 1

你可以convert a string back to a boolean

$value = (bool)$valueFromDatabase;

请记住:

  

转换为布尔值时,以下值被视为 FALSE

     
      
  • boolean FALSE 本身
  •   
  • integer 0(零)
  •   
  • float 0.0(零)
  •   
  • stringstring“0”
  •   
  • 一个零元素的array
  •   
  • 特殊类型NULL(包括未设置的变量)
  •   从空标记 SimpleXML 创建的
  • 2个对象   其他任何事情都被视为真理
  •   

不是明确地转换为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>;

参见this playground example

中的演示

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"写入记录。显然,您希望将其改编为您的代码结构,但您应该明白这一点。