我使用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相关的问题还是我错过了什么?提前感谢您的帮助。
@Nicklas已经解释了错误的原因。
现在发生这种情况的原因是,Laravel 5.3默认使用MySQL的strict
模式。
如果您想恢复到以前的行为,请更新您的config/database.php
文件并设置'strict' => false
为您的连接。
您正在尝试将一个没有'URL'属性的对象插入到一个有'URL'列而没有默认值的表中。所以数据库不知道如何处理这一列。
你可以做三件事中的一件。
- 在create 中填写URL值
- 修改模式以允许在URL 上插入空
- 修改URL模式以包含默认值。(空字符串)
如果您需要进一步的帮助,请发布您的迁移或模式。