首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在自定义主键和外键中定义Laravel关系

在自定义主键和外键中定义Laravel关系
EN

Stack Overflow用户
提问于 2021-10-27 13:07:01
回答 2查看 144关注 0票数 0

我有2个表,它是一对一关系模型类型。

学生表= id|nik|name|address。帐户表=id|nik|用户名|密码。

在这种情况下,每个学生都有一个帐户,我将NIK作为学生模型中的$primaryKey。如何定义这种关系呢?提前谢谢。

代码语言:javascript
运行
复制
// Student Model
public function account()
{
    return $this->hasOne(Account::class, 'nik', 'nik');
}

// Account Model
public function student()
{
    return $this->belongsTo(Student::class, 'nik', 'nik');
}
EN

回答 2

Stack Overflow用户

发布于 2021-10-27 13:16:54

在您的学生表中,您应该定义一个名为'account_id‘的新列来表示学生帐户,并且该列应该为空。

代码语言:javascript
运行
复制
        $table->unsignedBigInteger('account_id')->nullable();
  $table->foreign('account_id')->references('nik')->on('accounts');

然后,你可以在你的关系中使用它:

代码语言:javascript
运行
复制
// Student Model
public function account()
{
    return $this->hasOne(Account::class, 'account_id', 'nik');
}

// Account Model
public function student()
{
    return $this->belongsTo(Student::class, 'account_id', 'nik');
}
票数 0
EN

Stack Overflow用户

发布于 2021-10-27 13:20:51

您不应该在两个表中重复一个字段(nik),这与数据库规范化背道而驰。您应该在帐户表上创建student_id。这样你就可以在一对一的关系上遵循Laravel的标准。

代码语言:javascript
运行
复制
// Student Model
public function account()
{
    return $this->hasOne(Account::class);
}

// Account Model
public function student()
{
    return $this->belongsTo(Student::class);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69739280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档