Как сделать внешний ключ не используя первичный ключ - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть миграция на Laravel для таблицы pasien, как это:

public function up()
{
    Schema::create('pasien', function (Blueprint $table) {
        $table->string('No_RM');
        $table->timestamps();


        $table->primary('No_RM');
    });
}

и теперь я хочу сделать внешний ключ для No_RM, НЕ для id

public function up()
{
    Schema::create('data_primary', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unique('RM_id');
        $table->string('file_primary');
        $table->timestamps();

        $table->foreign('RM_id')->references('No_RM')->on('pasien');
    });
}

и все еще есть ошибка

1064 В вашем синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'unsigned not null, file_primary varchar (255) not null, created_at timestamp' в строке 1 ")

Может кто-нибудь исправить мою ошибку?

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Просто добавьте еще одну миграцию, чтобы изменить таблицу pasien, например

Schema::table('pasien', function (Blueprint $table) {
   $table->unique('RM_id');
});

и теперь вы можете объявить RM_id как внешний ключ в таблице data_primary, чтобы стать внешним ключом, это должен быть уникальный ключ.

Если вы отбросили свои миграции, вы создаете новые таблицы, вы можете сделать это как

pasien table

public function up()
{
    Schema::create('pasien', function (Blueprint $table) {
        $table->increments('id');
        $table->string('No_RM')->unique();
        $table->timestamps();
    });
}

и data_primary table

public function up()
{
    Schema::create('data_primary', function (Blueprint $table) {
        $table->increments('id');
        $table->string('RM_id');
        $table->string('file_primary');
        $table->timestamps();

        $table->foreign('RM_id')->references('RM_id')->on('pasien')
                ->onUpdate('cascade')->onDelete('cascade');
    });
}
0 голосов
/ 27 апреля 2019

Концептуально вы не можете ссылаться на внешний ключ на не первичный ключ, это нарушает концепцию реляционной базы данных, можете ли вы предоставить мне ERD, может быть, я могу помочь изменить структуру вашей БД

...