我使用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相关的问题还是我遗漏了什么?提前感谢您的帮助。
答案 0 :(得分:42)
@Nicklas解释了错误的原因。
然而,现在发生这种情况的原因是Laravel 5.3默认使用class JsonParser
' adapted from: http://stackoverflow.com/questions/6627652/parsing-json-in-excel-vba
private se
private sub Class_Initialize
set se = CreateObject("MSScriptControl.ScriptControl")
se.Language = "JScript"
se.AddCode "function getValue(jsonObj, valueName) { return jsonObj[valueName]; } "
se.AddCode "function enumKeys(jsonObj) { var keys = new Array(); for (var i in jsonObj) { keys.push(i); } return keys; } "
end sub
public function Decode(ByVal json)
set Decode = se.Eval("(" + cstr(json) + ")")
end function
public function GetValue(ByVal jsonObj, ByVal valueName)
GetValue = se.Run("getValue", jsonObj, valueName)
end function
public function GetObject(ByVal jsonObject, ByVal valueName)
set GetObjet = se.Run("getValue", jsonObject, valueName)
end function
public function EnumKeys(ByVal jsonObject)
dim length, keys, obj, idx, key
set obj = se.Run("enumKeys", jsonObject)
length = GetValue(obj, "length")
redim keys(length - 1)
idx = 0
for each key in obj
keys(idx) = key
idx = idx + 1
next
EnumKeys = keys
end function
end class
模式用于MySQL。
如果您想恢复之前的行为,请更新您的set jp = new JsonParser
set jo = jp.Decode("{value: true}")
keys = jp.EnumKeys(jo)
value = jp.GetValue(jo, "value")
文件并为您的连接设置strict
。
答案 1 :(得分:10)
您正在尝试插入一个没有&#39; URL&#39;属性,进入一个包含&#39; URL&#39;没有默认值的列。因此,数据库无法知道如何处理该列。
你可以做三件事之一。
如果您需要进一步的帮助,请发布您的迁移或架构。