Невозможно сделать первичный ключ и первичный ключ одновременно с миграцией Laravel - PullRequest
0 голосов
/ 01 февраля 2019

Я пытался создать внешний ключ в первичном ключе при одной миграции.

Это для Laravel 5.7.Я пробовал разные способы достичь своей цели.Это мой последний код.

    Schema::create('teachers', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->integer('user_id')->unsigned()->primary();
        $table->timestamps();
    });

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

Создает обычную таблицу с "user_id" в качестве первичного ключа, но это не внешний ключ.

Ответы [ 4 ]

0 голосов
/ 02 февраля 2019

Вы пробовали это?

Schema::create('teachers', function (Blueprint $table) {
    $table->engine = 'InnoDB';
    $table->integer('user_id')->unsigned();
    $table->timestamps();

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

Я не думаю, что primary() может быть приковано цепью к определению столбца, как unique() может.

0 голосов
/ 01 февраля 2019
Schema::create('teachers', function (Blueprint $table) {
    $table->engine = 'InnoDB';
    $table->integer('user_id')->unsigned()->nullable();
    $table->timestamps();
    $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
});
0 голосов
/ 01 февраля 2019
<?php

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

class CreateTeachersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        if (!Schema::hasTable('teachers')) 
        {
            Schema::create('teachers', function (Blueprint $table) {
                $table->increments('id');
                $table->string('teacher_name');
                $table->unsignedInteger('user_id');
                $table->timestamps();
                $table->foreign('user_id')->references('id')->on('users');

            });
        }       
    }

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

Теперь Вы хотите установить foriegn key как id из users таблица в teachers таблица

AM I Clear

Теперь добавление столбца в таблицу учителей и добавление внешнего ключа constarint

METHOD ONE

Добавление столбца

$table->unsignedInteger('user_id');

Для добавления первичного ключа

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

Объяснение теперь user_id - это имя поля в таблице учителей references('id') ссылается на идентификатор on('users') в таблице пользователей

METHOD TWO

КомуДобавьте столбец

$table->integer('user_id');

Для добавления первичного ключа

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

Объяснение сейчас user_id - это имя поля в таблице учителей references('id') ссылается на идентификатор on('users') в таблице пользователей, unsigned() добавление unsignedinteger в столбец

If Your issue is not solved kindly comment below

Надеюсь, это поможет

0 голосов
/ 01 февраля 2019

Попробуйте этот код

Schema::create('teachers', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->timestamps();
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...