如何在不使用主键的情况下制作外键

How to make a foreign key not using primary key

我在 Laravel 上为 table pasien 进行了这样的迁移:

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


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

现在我想为 No_RM 创建外键,NOTid

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 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'unsigned not null, file_primary varchar(255) not null, created_at timestamp ' at line 1")

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

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

只需添加另一个迁移即可修改您的 pasien table 喜欢

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

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

如果您放弃了迁移,那么您正在创建新的 tables,您可以像

帕辛table

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

data_primarytable

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