当前位置: 首页 > 知识库问答 >
问题:

如何将主键本身设置为laravel中的外键?

诸葛品
2023-03-14

这听起来很无聊,但我想知道我是否可以让主键在Laravel中作为外键工作,我对Laravel是新手。

因此,我有两个迁移“User”和“Student”,如下所示:User:

 Schema::create('users', function (Blueprint $table) {
            $table->string('uniqueId', 30)->primary();
            $table->text('password');
            $table->string('userType');
            $table->timestamps();
        });

学生:

Schema::create('students', function (Blueprint $table) {
            $table->string('uniqueId', 30)->primary();
            $table->text('name');
            $table->text('fName');
            $table->text('mName');
            $table->text('addr');
            $table->string('image');
            $table->integer('class');
            $table->integer('roll');
            $table->string('year');
            $table->timestamps();
        });

所以,我所想要的是,学生(uniqueId)中的主键也可以用作引用User表中的uniqueId列的外键。

提前谢谢。

共有3个答案

石喜
2023-03-14

你可以这样做:

if (!Schema::hasTable('users')) {
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->text('password');
        $table->string('userType');
        $table->timestamps();
    });
}

if (!Schema::hasTable('students')) {
    Schema::create('students', function (Blueprint $table) {
        $table->increments('id');
        $table->text('name');
        $table->text('fName');
        $table->text('mName');
        $table->text('addr');
        $table->string('image');
        $table->integer('class');
        $table->integer('roll');
        $table->string('year');
        $table->timestamps();
        $table->foreign('user_id', 'fk_users_user_id')
            ->references('id')->on('users')->onUpdate('NO ACTION')->onDelete('cascade');
        });
}
洪宏硕
2023-03-14

虽然没有必要,但可以通过迁移添加外键约束。

https://laravel.com/docs/8.x/migrations#foreign-关键制约因素

林祯
2023-03-14

这不是对迁移文件所做的事情,而是如何在模型本身中设置关系。老实说,我会尝试避免使用同一主键表示两个模型,而是向students表中添加另一列,名为$table-

    public function user()
    {
        return $this->hasOne(User::class);
    }

 类似资料:
  • 我有两个表,在我的Spring代码中是学生和课程。我想创建一个关系表,“获取课程”。我只有学生ID和课程ID。我可以在我的java代码中创建一个具有两个主键的表,但我不能将它们声明为外键。 我尝试了这个解决方案,将两个外键作为主键,但没有成功,我认为其中缺少了一些部分。因此,我尝试了基于此解决方案的方法: (学生实体有id, name, surname)(课程实体有id, Coursename)

  • 我需要创建3个如下所示的表 学生(SID:CHAR(12),SNAME:VARCHAR(50),BDATE:日期,地址:VARCHAR(50),SCITY:VARCHAR(20),年份:CHAR(20),GPA:FLOAT) 公司(CID:CHAR(8),CNAME:VARCHAR(20)) 应用(SID:CHAR(12),CID:CHAR(8)) (粗体属性为主键) 但是我不确定如何设置外键,因

  • 我正在使用Laravel4.2SchemaBuilder创建一些相互引用的表,但遇到了一些问题。 我有一个简化的ERD。请注意,仅显示相关列: 请注意,我无法以任何方式修改和表,因为我正在开发一个模块以连接到现有系统。 我正在努力实现以下目标: 表包含有关表中的行的额外信息 目前,我使用以下代码创建两个表: 表的创建脚本将导致以下SQL查询: 这反过来会导致以下错误: SQLSTATE[42000

  • 我正在使用实体框架管理我的sql server ce数据库。我希望我的表的主键由其他表的几个外键组成。我希望这样的事情能奏效: 但它会导致以下数据库迁移错误: 票据打印机。Bill::EntityType“Bill”没有定义键。定义此EntityType的键。Bills:EntityType:EntitySet“Bills”基于未定义键的类型“Bill”。 如何使表具有由这三个外键组成的主键?

  • 我在model和model之间有一个关系。这意味着每个用户都有0或1个总统设置。因此,表的主索引与外键相同。 这就是我想要添加外键的方式: 但是我得到以下错误: 我怎么才能修好它?我使用InnoDB引擎,所以我知道我可以设置索引键为外键。

  • 我使用的框架Laravel。 我有两个表(用户和人员)。我想将persons表的主键person\u id存储在users表的外键person\u id中。目前我使用这个$user- 表用户 餐桌上的人 索引操作 商店行动 用户迁移 人员迁移 模型用户 模范人物 我只想改变这个:$user-