Добавить миграции Laravel с внешними ключами - PullRequest
1 голос
/ 23 сентября 2019

Я создал таблицу под названием «пользователи». Есть таблицы с названиями «компании», «обозначения», «отделы». Я хочу добавить столбцы company_id, designation_id, Department_id в таблицу пользователей в качестве внешних ключей.

Я попробовал это, но это не сработало

public function up()
{
    Schema::table('users', function (Blueprint $table) {

        $table->integer('department_id');
        $table->integer('company_id');
        $table->integer('designation_id');

        $table->foreign('department_id')->references('id')->on('departments')->onDelete('restrict')->onUpdate('restrict');
        $table->foreign('company_id')->references('id')->on('companies')->onDelete('restrict')->onUpdate('restrict');
        $table->foreign('designation_id')->references('id')->on('designations')->onDelete('restrict')->onUpdate('restrict');



    });
}


public function down()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn(['department_id','company_id','designation_id']);
    });
}

При переносе миграции отображается эта ошибка.

Освещение \ Database \ QueryException: SQLSTATE [HY000]:Общая ошибка: 1005 Невозможно создать таблицу lanwadb. users (номер ошибки: 150 «Неправильно сформировано ограничение внешнего ключа») (SQL: изменить таблицу users добавить ограничение users_department_id_foreign ссылки на внешний ключ (department_id)departments (id) при удалении ограничить при обновлении ограничить)

Обозначение миграции следующим образом,

public function up()
    {
        Schema::create('designations', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestampsTz();
        });
    }

Миграция отдела следующим образом,

public function up()
    {
        Schema::create('departments', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->integer('company_id');
            $table->timestampsTz();
        });
    }
    ```





Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Для установления связи поле внешнего ключа должно быть index ed.Здесь у вас есть три столбца, которые вы хотите использовать в качестве внешнего ключа 'company_id', 'department_id' и 'designation_id'.В миграции Laravel вы можете использовать функцию unsigned() для index их.

Пример:

$table->integer('department_id')->unsigned();
$table->integer('company_id')->unsigned();
$table->integer('designation_id')->unsigned();

Есть еще одна функция с именем unsignedInteger(), с помощью которой вы можете сделать столбец как целочисленныйи без знака.

$table->unsignedInteger('department_id');
$table->unsignedInteger('company_id');
$table->unsignedInteger('designation_id');
1 голос
/ 23 сентября 2019

используйте это:

    $table->integer('department_id')->unsigned()->nullable();
    $table->integer('company_id')->unsigned()->nullable();
    $table->integer('designation_id')->unsigned()->nullable();
    $table->foreign('department_id')->references('id')->on('departments')->onDelete('cascade')->onUpdate('cascade');
    $table->foreign('company_id')->references('id')->on('departments')->onDelete('cascade')->onUpdate('cascade');
    $table->foreign('designation_id')->references('id')->on('departments')->onDelete('cascade')->onUpdate('cascade');
...