如何在 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 中定义和使用外键作为主键?的主要内容,如果未能解决你的问题,请参考以下文章