Проблема внешнего ключа при миграции миграций в Laravel 5.6 - PullRequest
0 голосов
/ 02 июля 2019

Я работаю над приложением Laravel 5.6, в котором у меня есть 2 таблицы, в основном sponsors таблица и children таблица.Создаю отношения один-ко-многим между таблицами перед их миграцией.У ребенка может быть много спонсоров.Проблема в том, что я получаю эту ошибку при их миграции с помощью команды php artisan migrate:

Подсветка \ База данных \ QueryException: SQLSTATE [HY000]: Общая ошибка: 1005 Не удается создать таблицу larangular. #sql-520c_21f (ошибка: 150 "Ограничение внешнего ключа сформировано неправильно") (SQL: таблица изменения sponsors добавить ограничение sponsors_child_id_foreign ссылки на внешний ключ (child_id) children (id) при каскаде удаления)

Миграция спонсоров

public function up()
{
    Schema::create('sponsors', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->integer('child_id')->unsignedInteger();
        $table->foreign('child_id')->references('id')->on('children')->onDelete('cascade');
        $table->foreign('child_id')->references('id')->on('children');
        $table->string('email')->unique();
        $table->string('phone');
        $table->string('nationality');
        $table->timestamps();
    });
}

Миграция детей

public function up()
{
    Schema::create('children', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->integer('age');
        $table->string('gender');
        $table->timestamps();
    });
}

Ответы [ 2 ]

1 голос
/ 02 июля 2019

unsignedInteger - это функция, которая создает столбец, ее не следует вызывать для существующего столбца.

// This creates an unsigned integer column.
$table->unsignedInteger('child_id');
0 голосов
/ 02 июля 2019

Убедитесь, что миграция ваших детей выполняется до миграции спонсоров, и тогда столбец должен быть таким:

$table->unsignedInteger('child_id');

// or 

$table->integer('child_id')->unsigned();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...