如何使用Laravel在MySQL中更新null

sha*_*ane 5 php mysql laravel laravel-5.8

我正在尝试插入和更新的api,并且在null上遇到问题。已经搜索了几乎所有问题和解决方案,但仍然存在问题,请帮助我。

表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
Run Code Online (Sandbox Code Playgroud)

码:

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';
    }
}
Run Code Online (Sandbox Code Playgroud)

并在下面得到此错误:

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)
Run Code Online (Sandbox Code Playgroud)

伙计们,我刚刚发现问题出在这一行:

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)
Run Code Online (Sandbox Code Playgroud)

我猜传入的是字符串,它的控制器有:

$order = $data['order_no'] ? $data['order_no'] : null;
Run Code Online (Sandbox Code Playgroud)

我仍然不知道为什么,但是我将其更改为:

$data['order_no'] = $request->order_no ? $request->order_no : null;
Run Code Online (Sandbox Code Playgroud)

然后回到editBrand():

$data['order_no'] = $request->order_no ? $request->order_no : 'null';
Run Code Online (Sandbox Code Playgroud)

现在可以使用了。

小智 2

这个错误是因为对值进行求和。如果数据库中未设置为 null yes,则整数无法存储空值,这意味着如果未设置为 null mysql 将检查是否需要插入值,但空值不是整数类型。