如何在 Laravel 中定义和使用外键作为主键?

Posted

技术标签:

【中文标题】如何在 Laravel 中定义和使用外键作为主键?【英文标题】:How to define and use a foreign key as primary key in Laravel? 【发布时间】:2020-08-07 08:56:58 【问题描述】:

我有一个用户表,可以存储 8 种不同类型的用户。根据用户类型,我还有一些其他表,其中包含特定的数据集。因此,我想同时使用用户表中的 ID 作为这些表的外键和主键。但是我是 Laravel 的新手,我不知道如何做到这一点以适应惯例,或者,如果不可能,在定义我的模型和一对一关系时如何做到这一点。有人能帮我吗?谢谢!

编辑:对不起,我认为我的解释不够清楚。假设我有 4 个表:users、user_types、customer_organzations、partners 和 customers。我想使用 ID,即用户的 PK,作为表 customer_organizations、合作伙伴和客户的外键和主键,这些表具有不同的信息,因为它们是我的应用程序中不同类型的用户,但他们都登录用户表。我不在乎 user_types 表。我想我知道如何处理它。

【问题讨论】:

laravel.com/docs/7.x/… 【参考方案1】:

您没有为我们提供太多关于表结构的信息,因此假设您在users 表和user_types 表之间有一个简单的one-to-one 关系,以下将创建所需的关系。

在您的user_types 表迁移中

$table->foreignId('user_id')->constrained();

以上内容会将您的外键添加到表中并创建与users 表的关系(这是使用约定“神奇地”完成的,因此命名很重要)。

然后在您的eloquent 模型中,添加模型之间的关系:

User.php

public function type()

    return $this->hasOne(UserType::class);

UserType.php

public function user()

    return $this->belongsTo(User::class);

【讨论】:

非常感谢,Unflux。也许我的问题有点令人困惑。我已经对其进行了编辑以提供更多信息。 根据您的 OP 更新,只需在每个表中添加 user_id 列,在迁移中添加 FK 约束并与模型建立雄辩的关系。 非常有用的@Unflux。这比我想象的要容易:) 非常感谢!

以上是关于如何在 Laravel 中定义和使用外键作为主键?的主要内容,如果未能解决你的问题,请参考以下文章

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

Laravel 模式构建器主键作为外键

使用laravel在hasMany关系中使用外键覆盖主键

Laravel 检查集合是不是包含外键

如何使用主键作为JPA和Hibernate的外键引用?

外键为啥必须是唯一键?为啥至少唯一键才能作为其他表的外键?不唯一为啥不可以?