如何使外键不使用主键

问题描述 投票:0回答:2

我在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行附近使用正确的语法

有人可以纠正我的错误吗?

laravel foreign-keys relation
2个回答
1
投票

只需添加另一个迁移来修改你的pasien

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

现在你可以在RM_id,table中声明data_primary作为外键,成为外键,它应该是唯一键。

如果您放弃了迁移,则可以创建新的表格

病人的桌子

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

和data_primary表

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');
    });
}

-1
投票

从概念上讲,你不能将外键引用到非主键,它打破了关系数据库的概念,你能为我提供ERD,也许我可以帮助重新设计你的数据库结构

© www.soinside.com 2019 - 2024. All rights reserved.