Я использую 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, или я что-то упускаю? Заранее благодарим за помощь.
Причина ошибки объясняется @Nicklas.
Причина, по которой это происходит сейчас, заключается в том, что Laravel 5.3 по умолчанию использует strict
режим для MySQL.
Если вы хотите вернуться к предыдущему поведению, обновите файл config/database.php
и установите для него 'strict' => false
.
Вы пытаетесь вставить объект без атрибута «URL» в таблицу с столбцом «URL» без значения по умолчанию. Таким образом, база данных не может знать, что делать с этим столбцом.
Вы можете сделать одну из трех вещей.
Отправьте свою миграцию или схему, если вам нужна дополнительная помощь.