SQLSTATE [HY000]: общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа Laravel 5.4 - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть проблема, которую я никак не могу решить с помощью миграций Laravel.

Это миграция моих пользователей, имя данных: 2014_12_10_000000_create_users_table.php

Schema::create('users', function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments('id');

            $table->unsignedInteger('user_parent_id')->nullable();
            $table->unsignedInteger('company_id')->nullable();

            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();

        });

Это компаниямиграция таблицы, имя файла 2018_06_01_080858_create_company_table.php

Schema::create('company', function (Blueprint $table) {
            $table->engine = 'InnoDB';
            $table->increments('id');
            $table->unsignedInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users');
             ....
            $table->timestamps();
        });

Это вместо миграции для установки внешних ключей, имя файла: 2018_11_13_111338_alter_foreign_keys.php

Schema::table('users', function($table) {
          $table->foreign('user_parent_id')->references('id')->on('users');
          $table->foreign('company_id')->references('id')->on('company');
      });

Когда я пытаюсь запустить php artmigrate У меня всегда есть эта ошибка:

    In Connection.php line 647:                                                                               
      SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `users` add constraint `users_company_id_foreign` foreign key (`company_id`) references `company` (`id`))                 

In PDOStatement.php line 144:                                                                          
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint      
In PDOStatement.php line 142:                                                                          
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

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

Любые предложения приветствуются, спасибо.

Это код класса alterForeignTable:

<?php

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

class AlterForeignTable2 extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {


      Schema::table('users', function($table) {
          $table->foreign('user_parent_id')->references('id')->on('users');
          $table->foreign('company_id')->references('id')->on('company');
      });


      Schema::table('otherstable', function($table) {
          $table->foreign('user_id')->references('id')->on('users');
      });
    }
}

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Сначала вы должны сделать поле user_id индексом:

$table->index('user_id');

После этого вы можете создать внешний ключ с действием на каскад:

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

Если вы хотитесделать это с новой миграцией, вы должны сначала удалить индекс и внешний ключ и сделать все с нуля.

В функции down () вы должны сделать это, а затем up () сделать то, что яписал выше:

$table->dropForeign('user_parent_id');
$table->dropIndex('lists_user_id_index');
$table->dropColumn('user_id');

попробуйте это, надеюсь, это будет работать.

0 голосов
/ 14 ноября 2018

У вас есть две модели и добавление двух сторонних идентификаторов.Это много ко многим работающим.Вам просто нужно добавить сводную таблицу с company_id и user_id этой статьи

https://laraveldaily.com/pivot-tables-and-many-to-many-relationships/

...