@Nentra

При миграции у меня написало ошибки но таблицы создались, я правильно понимаю что ошибки написало из за того что у меня нет миграции таблицы users'?

Вот она мне это написал
php artisan migrate --seed

   INFO  Preparing database.

  Creating migration table ............................................................................................................... 21ms DONE

   INFO  Running migrations.  

  2023_03_23_105734_create_posts_table ................................................................................................... 35ms FAIL

In Connection.php line 760:
                                                                                                                                                                                                                                        
  SQLSTATE[HY000]: General error: 1005 Can't create table `working_na4u_ru_lumen`.`posts` (errno: 150 "Foreign key constraint is incorrectly formed") (Connection: mysql, SQL: alter table `posts` add constraint `posts_user_id_fore   
  ign` foreign key (`user_id`) references `users` (`id`))                                                                                                                                                                               
                                                                                                                                                                                                                                        

In Connection.php line 545:

  SQLSTATE[HY000]: General error: 1005 Can't create table `working_na4u_ru_lumen`.`posts` (errno: 150 "Foreign key constraint is incorrectly formed")


В уроке было написано что просто создадутся таблицы, у меня почему то создалисьб но ошибки какие то написали.

Вот этот Рунинг мигратион не сработал
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->string('slug')->unique();
            $table->text('body');
            $table->boolean('published')->default(false);
            $table->unsignedInteger('user_id');
            $table->timestamps();

            $table->foreign('user_id')->references('id')->on('users');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};


Ожидал что просто копировал - вставил - заработало, а так не получилось
в статье https://laravel-news.com/authorization-gates есть привязка к ключам юзер
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');


Я правильно понимаю, что у меня ещё должна быть таблица 'users', но про неё написать в статье забыли?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
По-умолчанию колонка id в Laravel имеет тип unsigned bigint. Такой тип у колонки users.id. Вы пытаетесь на неё сосласться из колонки posts.user_id, которая имеет тип unsigned int, отсюда и ошибка.

Внешний ключ создаётся отдельным запросом, поэтому таблицы у вас создались, а он нет. Более того, при следующей попытке запуска миграций вы получите ошибку "таблица posts уже существует", потому что миграция выполнилась наполовину и будет пытаться выполниться снова.
Нужно вручную удалить таблицу, исправить тип колонки и перезапустить миграцию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы