Как вставить логическое значение «ложь» как 0 с вставкой БД? - PullRequest
0 голосов
/ 28 июня 2018

Я получаю данные из запроса API, и они содержат значение «true» или «false».

Прежде чем я использовал PDO :: PARAM_BOOL, чтобы связать значение и вставить его в MySQL

Теперь я использую Laravel и хочу знать, как я могу вставить это значение как логическое значение 1 или 0.

Я создал миграцию, которая содержит

$table->boolean('businessorder');  

Я сохраняю данные в массив и вставляю их в свою таблицу:

$orderarray = [];

  foreach($csv as $data => $orderdata){
    $orderarray[] = [
    ...
    'businessorder' => $orderdata['is-business-order'],
    ...
    ];

  }

Я получаю следующую ошибку

SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: 'false' for column 1  

В сообщении об ошибке также отображаются данные для вставки в базу данных как "ложные", а не как 0.

Как я могу убедиться, что он вставит 0 или 1 вместо true или false

Когда я делаю

'businessorder' => (bool)$orderdata['is-business-order'],  

Он установит все в 1 (потому что (bool) 'false' - true)

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Согласно этому посту вы можете сделать что-то вроде этого:

'businessorder' => filter_var($orderdata['is-business-order'], FILTER_VALIDATE_BOOLEAN),
0 голосов
/ 28 июня 2018

Когда вы пытаетесь поместить значение $orderdata['is-business-order'] в столбец БД, MySQL пытается ввести true или false.

Но true или false нельзя сохранить в столбце логического типа. Таким образом, мы можем сделать что-то вроде приведенного ниже кода, чтобы получить 1 или 0 вместо true или false.

'businessorder' => ($ orderdata ['is-business-order'] == 'true'? 1: 0)

...