Laravel 5.3 创建模型 Returns "Field doesn't have a default value"
Laravel 5.3 Creating Models Returns "Field doesn't have a default value"
我使用 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
类型的列,所以如果我在创建模型时没有向它传递任何值,它应该是一个空字符串。相反,我不断收到 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 相关的问题还是我遗漏了什么?在此先感谢您的帮助。
您正在尝试将一个没有 'URL' 属性的对象插入到 table 中,该 'URL' 列没有默认值。所以数据库不知道如何处理该列。
你可以做三件事中的一件。
- 在create
中填写URL值
- 更改架构以允许在 URL
上插入空值
- 更改 URL 架构以包含默认值。 (空字符串)
Post 您的迁移或模式,如果您需要进一步的帮助。
@Nicklas 已经解释了错误的原因。
然而,现在发生这种情况的原因是 Laravel 5.3 默认为 MySQL 使用 strict
模式。
如果您想恢复到以前的行为,请更新您的 config/database.php
文件并为您的连接设置 'strict' => false
。
我使用 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
类型的列,所以如果我在创建模型时没有向它传递任何值,它应该是一个空字符串。相反,我不断收到 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 相关的问题还是我遗漏了什么?在此先感谢您的帮助。
您正在尝试将一个没有 'URL' 属性的对象插入到 table 中,该 'URL' 列没有默认值。所以数据库不知道如何处理该列。
你可以做三件事中的一件。
- 在create 中填写URL值
- 更改架构以允许在 URL 上插入空值
- 更改 URL 架构以包含默认值。 (空字符串)
Post 您的迁移或模式,如果您需要进一步的帮助。
@Nicklas 已经解释了错误的原因。
然而,现在发生这种情况的原因是 Laravel 5.3 默认为 MySQL 使用 strict
模式。
如果您想恢复到以前的行为,请更新您的 config/database.php
文件并为您的连接设置 'strict' => false
。