在迁移表时出现错误。 错误显示
SQLSTATE [42000]:语法错误或访问冲突:1064您有一个 您的SQL语法错误;检查与您的手册相对应的手册 MariaDB服务器版本,可在'json null附近使用正确的语法,
start_date
日期不为空,end_date
日期不为空,status
枚举('' 在第1行(SQL:创建表modules
(id
int unsigned not null auto_increment主键,title
varchar(191)不为null,description
文字不为空,image
blob为空,resources
json为空,start_date
日期不为空,end_date
日期不为空,status
枚举('pending','start','completed')不为空默认'pending',user_id
int不为null,created_at
时间戳为null,updated_at
时间戳记null)默认字符集utf8mb4整理 'utf8mb4_unicode_ci')
我的表具有以下值:
public function up()
{
Schema::create('modules', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('description');
$table->binary('image')->nullable();
$table->json('resources')->nullable();
$table->date('start_date');
$table->date('end_date');
$table->ENUM('status',['pending','start','completed'])->default('pending');
$table->integer('user_id');
$table->timestamps();
});
}
这是我的模型代码:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class modules extends Model
{
protected $fillable = [
'title', 'description','image','resources', 'start_date','end_date','status','user_id',
];
}
有人可以解决这个问题吗?
答案 0 :(得分:3)
maria db的早期版本不支持json字段类型,请参见链接https://mariadb.com/resources/blog/json-with-mariadb-10-2/
请验证您的mariadb版本。
答案 1 :(得分:1)
从Laravel开始,$table->json()
方法将尝试在数据库中创建实际的JSON字段。但是,直到MySQL 5.7.8
才将JSON字段添加到MySQL。
因此,如果您使用的是5.7.8
之前的MySQL版本,则只需将其创建为文本字段即可
MariaDB新版本支持JSON。 (Alpha版本。Maria不建议将其用于生产服务器。仅用于测试。)
MariaDB 10.1不支持JSON
答案 2 :(得分:0)
可能添加$casts
类属性将解决您的问题。
class modules extends Model
{
protected $casts = [
'resources' => 'array',
];
}
Here可能会对您有所帮助。