Как обновить NULL в MySQL с помощью Laravel - PullRequest
5 голосов
/ 09 июля 2019

Я пытаюсь использовать API для вставки и обновления и у меня проблемы с нулем.Уже искали почти все вопросы и решения, но все еще получили проблему, пожалуйста, помогите мне.

таблица DDL:

CREATE TABLE `brand` (
  `brand_id` int(11) NOT NULL AUTO_INCREMENT,
  `brand_name_en` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL,
  `brand_name_ch` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL,
  `order_no` int(5) DEFAULT NULL,
  PRIMARY KEY (`brand_id`),
  KEY `index_brand` (`brand_name_en`)
) ENGINE=InnoDB AUTO_INCREMENT=126 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

Код:

public function editBrand($data){
    try{
        $en = $data['brand_name_en'];
        $ch = $data['brand_name_ch'];
        $order = $data['order_no'] ? $data['order_no'] : null;
        $brand_id = $data['brand_id'];
        $this->db = DB::table('brand')
        ->where('brand_id', $brand_id)
        ->update(["brand_name_en" => $en, "brand_name_ch" => $ch, "order_no" => $order]);
        return $this->db;
    }catch(\Exception $e) {
        $this->log('BrandRepo-editBrand Error');
        $this->log($e->getMessage());
        return 'SQL ERROR';
    }
}

и получили эту ошибкуниже:

General error: 1366 Incorrect integer value: 'null' for column 'order_no' at row 1 (SQL: update `brand` set `brand_name_en` = TEST, `brand_name_ch` = 測試, `order_no` = null where `brand_id` = 122)

Ребята, я только что обнаружил, что проблема в этой строке:

$order = $data['order_no'] ? $data['order_no'] : null;

Я думаю, что передать в строку, и его контроллер имеет:

$data['order_no'] = $request->order_no ? $request->order_no : null;

Почему-то я все еще знаю, почему, но я изменяю его на:

$data['order_no'] = $request->order_no ? $request->order_no : 'null';

и возвращаюсь к editBrand ():

$order = ($data['order_no'] != 'null') ? $data['order_no'] : null;

Это работает сейчас.

Ответы [ 2 ]

2 голосов
/ 09 июля 2019

Эта ошибка из-за значения интергера.integer не может хранить нулевое значение, если не установлено как null yes в базе данных; если не установлено, null mysql проверит, что необходимо вставить значение, но нулевое значение не является типом integer.

1 голос
/ 09 июля 2019

Как заявляет ксенон, по умолчанию ожидается, что вы либо определите целочисленные поля как обнуляемые в вашей базе данных, либо предоставите действительное числовое значение при сохранении.

Однако это поведение можно переопределить, если отключить «строгий» режим в файле конфигурации базы данных.

/ конфигурации / database.php

'mysql' => [
    ...
    'strict' => false,
    ...
],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...