SQLSTATE [42000]: Синтаксическая ошибка или нарушение прав доступа: 1064 При выполнении миграции произошла ошибка в синтаксисе SQL. - PullRequest
0 голосов
/ 15 января 2020

Когда я запускаю

php artisan migrate

Ниже приведена моя схема

{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('pages', function (Blueprint $table) {
            $table->string('url')->unique()->after('id');
            $table->string('type')->after('meta_data');
            $table->json('meta_data')->change();
            $table->unsignedInteger('status_id')->default(3)->after('type');
            $table->boolean('is_active')->default(false)->after('status_id');

            $table->engine = 'InnoDB';

            // Foreign Key
            $table->foreign('status_id')
                ->references('id')->on('statuses')
                ->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('pages', function (Blueprint $table) {
            $table->dropColumn('is_active');
            $table->dropColumn('status_id');
            $table->dropColumn('type');
            $table->dropColumn('url');
        });
    }
}

Следующая ошибка показывает

Подсветка \ База данных \ QueryException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; обратитесь к руководству, соответствующему вашей MySQL версии сервера, чтобы узнать правильный синтаксис для использования рядом с 'CHARACTER SET utf8mb4 NOT NULL' в строке 1 (SQL: ALTER TABLE pages CHANGE meta_data meta_data JSON CHARACTER SET utf8mb4 NOT NULL)

1 Ответ

1 голос
/ 15 января 2020
Schema::table('pages', function (Blueprint $table) {
            $table->string('url')->unique()->after('id');
            $table->string('type')->after('meta_data');
            $table->longText('meta_data')->change(); //changed to longText
            $table->unsignedInteger('status_id')->default(3)->after('type');
            $table->boolean('is_active')->default(false)->after('status_id');

            $table->engine = 'InnoDB';

            // Foreign Key
            $table->foreign('status_id')
                ->references('id')->on('statuses')
                ->onDelete('cascade');
        });

в этом случае вы можете сохранить значения json в поле metadata ПРОСТО ДЕЛАЙТЕ ЭТО В КОНТРОЛЛЕРЕ в вашем контроллере, прежде чем хранить ----> json_encode($metadata_variable); и когда вы хотите прочитать или использовать это ------> json_decode($metadata);

Я использовал это, и он работает нормально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...