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 в 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, или я что-то упустил? Заранее благодарим за помощь.


person Guney Cobanoglu    schedule 02.09.2016    source источник


Ответы (2)


Причину ошибки объяснил @Nicklas.

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

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

person patricus    schedule 03.09.2016

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

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

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

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

person Nicklas Kevin Frank    schedule 02.09.2016
comment
не должен mysql возвращать ошибку при попытке вставить значение NULL в поле, не допускающее значения NULL? - person Sherif; 03.09.2016
comment
Да? В этом случае он просто ничего не вставляет в поле, даже нулевое значение. - person Nicklas Kevin Frank; 03.09.2016
comment
В моей ситуации у меня пустой столбец. Когда я сделал его nullable () по умолчанию, все стало работать нормально. - person Evgeniy Miroshnichenko; 04.04.2017