Laravel 6.5.1 миграция Errno: синтаксическая ошибка или нарушение прав доступа 1064 - PullRequest
0 голосов
/ 09 апреля 2020

Я попытался выполнить миграцию, и я столкнулся с этой ошибкой: синтаксическая ошибка или нарушение прав доступа 1064. Я смотрел на другие подобные проблемы, но не мог найти решение этой проблемы. Пожалуйста, помогите, и спасибо заранее.

        Schema::create('posts', function (Blueprint $table) {
           $table->bigIncrements('id');
           $table->unsignedBigInteger('author_id');
           $table->foreign('author_id')->references('id')->on('authors')->onDelete('cascade');
           $table->string('title');
           $table->text('excerpt');
           $table->longText('body');
           $table->binary('post_image');
           $table->timestamp('published_at')->nullable();
           $table->timestamps();
           $table->softDeletes();
        }); 


        Schema::create('authors', function (Blueprint $table) {
           $table->bigIncrements('id');
           $table->string('fist_name');
           $table->string('last_name');
           $table->binary('pic')->nullable();
           $table->timestamps();
           $table->softDeletes();
        });

1 Ответ

0 голосов
/ 09 апреля 2020

Предполагая, что это одна миграция с созданием обеих таблиц. Что, на мой взгляд, не лучшая идея. Лучше разделить каждую таблицу на собственную миграцию.
Попробуйте переключить оба блока создания. Таким образом, прежде чем что-либо о posts -таблице будет сделано, authors -таблица уже создана.

Поскольку вы пытаетесь установить внешний ключ из posts -таблицы в еще не созданную authors -таблицы, но оба они должны существовать.

Я также склонен отделять ограничения внешнего ключа от фактической структуры таблицы для лучшего обзора. Но это было бы личное мнение.

    Schema::create('authors', function (Blueprint $table) {
           $table->bigIncrements('id');
           $table->string('fist_name');
           $table->string('last_name');
           $table->binary('pic')->nullable();
           $table->timestamps();
           $table->softDeletes();
        });

    Schema::create('posts', function (Blueprint $table) {
           $table->bigIncrements('id');
           $table->unsignedBigInteger('author_id');
           $table->string('title');
           $table->text('excerpt');
           $table->longText('body');
           $table->binary('post_image');
           $table->timestamp('published_at')->nullable();
           $table->timestamps();
           $table->softDeletes();

           $table->foreign('author_id')->references('id')->on('authors')->onDelete('cascade');
        }); 

Надеюсь, что это может немного помочь.

...