如何不使用主键制作外键

时间:2019-04-27 01:53:27

标签: laravel foreign-keys relation

我在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 个答案:

答案 0 :(得分:1)

只需添加另一个迁移即可修改您的pasien表,例如

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

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

如果您删除了迁移,则可以创建新表,您可以这样做

pasien表

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 :(得分:-1)

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