Laravel - 如何将外键用于具有识别外键的表?

Posted

技术标签:

【中文标题】Laravel - 如何将外键用于具有识别外键的表?【英文标题】:Laravel - How to use a foreign key to a table with an identifying foreign key? 【发布时间】:2016-10-18 00:28:40 【问题描述】:

所以我有三个表:userscandidateslogs。现在candidates 没有自己的id,它有一个标识外键user_id。看起来很像这样:

-users-
id
name
etc.

-candidates-
user_id
type
etc.

现在我想要一个表logscandidates 具有一对多关系,因为候选人可以有零个或多个logs。所以我想要一个candidates 的外键,比如candidate_id。但是,这样说和 Laravel 不会自动理解这种关系。我应该将外键从 logs 命名为 candidates 以使 Laravel 理解这种关系?

【问题讨论】:

users->candidates 关系是一对一的关系吗? 是的@tkausl,确实如此。用户不一定有候选人,但候选人一定有用户。 然后你可以让用户拥有日志作为关系,然后候选人可以通过用户(hasManyThrough)拥有日志。如果“一”部分没有主键,就无法建立一对多关系。 【参考方案1】:

我认为最简单的方法是给候选人自己的增量ID,然后有两个关系表,candidate_user 和candidate_log。会根据Laravel docs进行设置

【讨论】:

我在问题中描述的 sql 结构对 sql 来说不是不合逻辑或不正统的,是吗?因为我认为 Laravel 应该支持所有有效的 sql 结构,因此我的问题应该可以在没有解决方法的情况下回答。同意吗?【参考方案2】:

您的候选人表必须有一个主键。

没有必要有一个增量 ID,但你不应该离开没有主键的表。

一旦定义了主键,您就可以将其用作参考。

Laravel 会尝试猜测你的外键名:

https://laravel.com/docs/5.2/eloquent-relationships#one-to-many

请记住,Eloquent 会自动确定 Comment 模型上正确的外键列。按照惯例,Eloquent 将采用拥有模型的“蛇形”名称并以 _id 为后缀。所以,对于这个例子,Eloquent 会假设 Comment 模型的外键是 post_id。

如果您的主键不是“id”列,您应该使用protected $primaryKeypublic $incrementing 属性来描述您的 Eloquent 模型中的主键。

【讨论】:

以上是关于Laravel - 如何将外键用于具有识别外键的表?的主要内容,如果未能解决你的问题,请参考以下文章

如何从具有两个外键的表中访问列?

Laravel中带有2个外键的搜索栏

通过 post 将外键的 id 传递给表单

将外键放入表单

如何在 SAP ASE Sybase 16 中从具有外键的表中删除行

将外键添加到迁移(Laravel)