Laravel 5.7 ограничение внешнего ключа сформировано неправильно - PullRequest
0 голосов
/ 04 декабря 2018

В основном я пытаюсь загрузить свои миграции в базу данных, но у меня возникают некоторые проблемы, потому что я пытаюсь ссылаться на столбцы из таблиц, которые еще не созданы.Я думал о миграции их 1 на 1, но, например, у меня есть таблицы групп и пользователей.У группы есть создатель (пользователь), а у пользователя есть группа.Поэтому я не могу ссылаться на них одновременно, потому что они не созданы.

Вот моя ошибка:

PDOException::("SQLSTATE[HY000]: General error: 1005 Can't create table `vote-system`.`#sql-1a08_37` (errno: 150 "Foreign key constraint is incorrectly formed")")

Миграция группы

public function up()
{
    Schema::create('groups', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->integer('created_by')->unsigned();
        $table->timestamps();

        // Relationships
        $table->foreign('created_by')->references('id')->on('users');
    });
}

Миграция пользователя

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->ipAddress('ip');
        $table->integer('votes_left');
        $table->rememberToken();
        $table->timestamps();
        $table->integer('group_id')->unsigned();

        // Relationships
        $table->foreign('group_id')->references('id')->on('groups');
    });
}

1 Ответ

0 голосов
/ 04 декабря 2018

Правильным способом было бы создание миграций для создания / удаления таблиц с более низкими временными метками (поэтому они выполняются первыми),

, а затем просто добавление / удаление всех внешних ключей с миграциями с временными метками, превышающими ранее использованные,Таким образом, вы не столкнетесь с проблемой, как сейчас.

Пример миграции для добавления внешних ключей:

class AddForeignKeysToMyTableTable extends Migration {

    public function up()
    {      
        Schema::table('my_table', function(Blueprint $table) 
        {
            $table->foreign('my_field_id', ...

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

https://github.com/Xethron/migrations-generator

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