mysql在laravel中的迁移

wecizke3  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(398)

迁移表时出错。错误显示
sqlstate[42000]:语法错误或访问冲突:1064您的sql语法有错误;请查看与您的mariadb服务器版本对应的手册,以了解使用“json null”附近的正确语法, start_date 日期不为空, end_date 日期不为空, status 第1行的枚举(“”)(sql:创建表 modules ( id int unsigned not null自动递增主键, title varchar(191)不为空, description 文本不为空, image blob为空, resources json为空, start_date 日期不为空, end_date 日期不为空, status enum('pending'、'start'、'completed')不为null默认为'pending', user_id int不为空, created_at 时间戳为空, updated_at 时间戳null)默认字符集utf8mb4 collate'utf8mb4\u unicode\u 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',
        ];
    }

有人能解决这个问题吗??

wwtsj6pe

wwtsj6pe1#

maria db的早期版本不支持json字段类型,请参见链接,https://mariadb.com/resources/blog/json-with-mariadb-10-2/
请验证您的版本。

iyr7buue

iyr7buue2#

可能正在添加 $casts 类属性将解决您的问题。

class modules extends Model
{
    protected $casts = [
        'resources' => 'array',
    ];
}

这是一些可能对你有帮助的东西。

3yhwsihp

3yhwsihp3#

到了拉雷维尔 $table->json() 方法将尝试在数据库中创建实际的json字段。但是,直到mysql才将json字段添加到mysql中 5.7.8 .
因此,如果您使用的mysql版本早于 5.7.8 ,只需将其创建为文本字段
mariadb新版本支持json(阿尔法版本。maria不向生产服务器推荐。仅用于测试。)
mariadb 10.1不支持json

相关问题