Laravel 5.3 Создание возвращаемых моделей "Поле не имеет значения по умолчанию"

Я использую 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 Атрибут - это столбец TEXT -type в MySQL, поэтому, если я не передаю ему никакого значения при создании модели, это должна быть пустая строка. Вместо этого я продолжаю получать ошибку 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, или я что-то упускаю? Заранее благодарим за помощь.

Ответ 1

Причина ошибки объясняется @Nicklas.

Причина, по которой это происходит сейчас, заключается в том, что Laravel 5.3 по умолчанию использует режим strict для MySQL.

Если вы хотите вернуться к предыдущему поведению, обновите файл config/database.php и установите для него 'strict' => false.

Ответ 2

Вы пытаетесь вставить объект без атрибута "URL" в таблицу с столбцом "URL" без значения по умолчанию. Таким образом, база данных не может знать, что делать с этим столбцом.

Вы можете сделать одну из трех вещей.

  • Введите значение URL-адреса в create
  • Измените свою схему, чтобы разрешить нулевую вставку в URL.
  • Измените схему URL, чтобы включить значение по умолчанию. (пустая строка)

Отправьте свою миграцию или схему, если вам нужна дополнительная помощь.