Решить laravel проблему миграции с внешними ключами - PullRequest
0 голосов
/ 19 апреля 2020

Я написал миграции, и они работали хорошо, пока я не попытался сделать их on delete cascade Я добавил $table->engine = 'InnoDB', и это было нормально. но в сеялках, когда я попытался запустить их, я получил ошибку

 PDOException::("SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`mohajerat`.`comments`, CONSTRAINT `comments_comment_id_foreign` FOREIGN KEY (`comment_id`) REFERENCES `comments` (`id`) ON
 DELETE CASCADE)")

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

  Schema::create('comments', function (Blueprint $table) {
            $table->id();
            $table->engine = 'InnoDB';
            $table->morphs('commentable');
            $table->string('body', 250);
            $table->foreignId('user_id')->constrained('users')->onDelete('cascade');
            $table->foreignId('comment_id')->constrained('comments')->onDelete('cascade');
            $table->timestamps();
        });

, и это моя сеялка:

    Schema::disableForeignKeyConstraints();
        Comment::truncate();
        Schema::enableForeignKeyConstraints();
        $users = \App\Models\User::all()->toArray();
        foreach ($users as $key => $user) {
//            $comment = \App\Models\Comment::all()->random();
            $post = \App\Models\Article::all()->random();
//            dd($user, $post);
            factory(Comment::class)->create([
                'user_id' => $user['id'],
                'commentable_id' => $post->id,
                'commentable_type' => get_class($post),
                'comment_id' => 0
            ]);
        }

пожалуйста, скажите мне, если вы знаете. спасибо!

1 Ответ

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

Примечание: Ваша таблица внешних ключей должна быть создана до того, как вы их назначите. Проверьте изображение и код.

В своей таблице продуктов я добавил "product_categories" и "product_brands" в качестве справочной таблицы. Я создал миграцию "products_categories" и "product_brands" перед созданием таблицы "products".

Таблица продуктов с внешним ключом

    Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->string('title')->unique();
        $table->string('slug')->unique();
        $table->unsignedBigInteger('category_id');
        $table->unsignedBigInteger('brand_id');
        $table->string('image');
        $table->text('description');
        $table->text('information')->nullable();
        $table->integer('stock');
        $table->bigInteger('price');
        $table->bigInteger('sale_price')->nullable();
        $table->string('sku')->nullable();
        $table->timestamps();
        $table->foreign('category_id')->references('id')->on('product_categories')->onDelete('cascade');
        $table->foreign('brand_id')->references('id')->on('product_brands')->onDelete('cascade');
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...