首页 > 解决方案 > Laravel 在不可为空的字段中插入 0 并且没有默认值

问题描述

我只在一个项目中遇到了这个奇怪的问题。目前可以执行此代码,Laravel 将转换为以下 SQL:

 $elTicket = documentos_venta::create([
      
    ]);

SQL:

 insert into `documentos_ventas` (`updated_at`, `created_at`) values (?, ?) ["2021-05-13 13:42:14","2021-05-13 13:42:14"] 

结果:SQL语句结果 SQL 语句结果

桌子: 表说明

这样做的问题是它不尊重数据库表中的不可为空的字段,它会自动用 0 填充不可为空的整数,用 null 填充 varchar。在项目中插入任何模型时发生。

忘了说在 mariaDB 中执行 sql 语句按预期失败

标签: phplaravel

解决方案


我发现了问题。在 config/database.php 里面 MYSQL 连接的配置不正确

不正确:

'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => false,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],

严格值是假的,它必须是真的。我不知道为什么设置为false


推荐阅读