【问题标题】:Laravel 5.3 Creating Models Returns "Field doesn't have a default value"Laravel 5.3 创建模型返回“字段没有默认值”
【发布时间】:2023-03-03 08:43:26
【问题描述】:

我使用 Laravel 和 Eloquent 已经两年了,今天我决定安装一个全新的 Laravel 5.3 并尝试一下。

我使用了我的旧数据库架构并创建了我的模型,定义了可填充的列。这是我的Page 模型的样子:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Page extends Model
{

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'language',
        'title',
        'slug',
        'url',
        'description',
        'tags',
        'wireframe',
        'order',
        'is_active'
    ];

    public function menus()
    {
        return $this->belongsToMany(Menu::class);
    }
}

url 属性是 MySQL 上的 TEXT-type 列,因此如果我在创建模型时没有向它传递任何值,它应该是一个空字符串。相反,我不断收到SQLSTATE[HY000]: General error: 1364 Field 'url' doesn't have a default value 错误。

这是我创建 Post 模型的尝试:

Page::create([
    'title' => $root_menu['title'],
    'slug' => $root_menu['slug'],
    'language' => $this->language,
    'wireframe' => key(config('cms.wireframe')),
    'order' => 0
]);

这是与 Laravel 5.3 相关的问题还是我遗漏了什么?提前感谢您的帮助。

【问题讨论】:

    标签: php mysql laravel laravel-5 laravel-5.3


    【解决方案1】:

    @Nicklas 已解释错误原因。

    然而,现在发生这种情况的原因是 Laravel 5.3 默认使用 MySQL 的 strict 模式。

    如果您想恢复以前的行为,请更新您的 config/database.php 文件并为您的连接设置 'strict' =&gt; false

    【讨论】:

      【解决方案2】:

      您正在尝试将没有“URL”属性的对象插入到具有“URL”列但没有默认值的表中。所以数据库不知道如何处理该列。

      你可以做三件事之一。

      1. 在创建中填写URL值
      2. 更改架构以允许在 URL 上插入空值
      3. 更改 URL 架构以包含默认值。 (空字符串)

      如果您需要进一步的帮助,请发布您的迁移或架构。

      【讨论】:

      • 在尝试将空值插入不可为空的字段时,mysql不应该返回错误吗?
      • 是吗?在这种情况下,他根本没有在字段中插入任​​何内容,甚至没有空值。
      • 在我的情况下,我的列是空的。当我默认设置为 nullable() 时,一切都开始正常工作了。
      猜你喜欢
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 2020-06-11
      相关资源
      最近更新 更多