Laravel移民

时间:2018-12-17 10:20:58

标签: mysql laravel

在迁移表时出现错误。 错误显示

  

SQLSTATE [42000]:语法错误或访问冲突:1064您有一个   您的SQL语法错误;检查与您的手册相对应的手册   MariaDB服务器版本,可在'json null附近使用正确的语法,   start_date日期不为空,end_date日期不为空,status枚举(''   在第1行(SQL:创建表modulesid 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',
        ];
    }

有人可以解决这个问题吗?

3 个答案:

答案 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可能会对您有所帮助。