Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel在不可为空的字段中插入0且没有默认值_Php_Laravel - Fatal编程技术网

Php Laravel在不可为空的字段中插入0且没有默认值

Php Laravel在不可为空的字段中插入0且没有默认值,php,laravel,Php,Laravel,我只有一个项目有这个奇怪的问题。 目前可以执行此代码,Laravel转换为以下SQL: $elTicket = documentos_venta::create([ ]); SQL: 结果: SQL语句结果 表: 问题是它不考虑数据库表中不可为空的字段 它会自动用0填充不可为null的整数,用null填充varchar。 在项目中插入模型时发生 忘了提到在mariaDB中执行sql语句会像预期的那样失败我发现了问题。 在config/database.php内部 M

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

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

结果: SQL语句结果

表:

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

忘了提到在mariaDB中执行sql语句会像预期的那样失败

我发现了问题。 在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,必须为true。
我不知道为什么设置为false,这很奇怪。它应该抛出一个NOTNULL约束冲突sql错误。您确定它会转换为sql查询吗?如果这些字段为空,可能会有一个变量覆盖它们。尝试在您的
AppServiceProvider
boot()
方法中添加以下内容:
\DB::listen(函数($query){debug([$query->sql,$query->bindings,$query->time])。然后进行查询并检查您的laravel日志。是的,这是非常罕见的。尝试一个新项目,效果很好。我不知道这是怎么回事。是的,这样我就得到了生成的sqlCheck
documentos\u venta
模型。是否有一个名为
setsucursaltribute($value)
?的函数,或者可能是定义了
创建
更新
保存
事件侦听器的函数?@IGP否,模型是正确的。同样的问题是在项目的任何模型中尝试
\DB::listen
之类的东西。它将显示针对您的数据库运行的绑定的确切查询。默认情况下,它将设置为false,以与绝大多数现有MySQL安装兼容(尽管严格的在任何情况下都更好)。您最近是否升级或更改了正在使用的数据库?我刚刚检查了其他项目,严格的值为true。这个项目是在Laravel7中开发的,它从PHP7.x开始,不久前它更新为PHP8.0,但它仍然在Laravel7中。编辑:更改另一个项目中的strict值,如果该值设置为false,则会有效解决此问题occurs@Jason我忘了在MYSQL文档中标记您:如果未启用严格模式,MYSQL将列设置为列数据类型的隐式默认值,对于数值类型,默认值为0@Jason是的,那是个错误。我找不到它,因为我不知道它被设置为false。
'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'),
        ]) : [],
    ],