Laravel - 如何将外键用于具有识别外键的表?
Posted
技术标签:
【中文标题】Laravel - 如何将外键用于具有识别外键的表?【英文标题】:Laravel - How to use a foreign key to a table with an identifying foreign key? 【发布时间】:2016-10-18 00:28:40 【问题描述】:所以我有三个表:users
、candidates
和 logs
。现在candidates
没有自己的id,它有一个标识外键user_id
。看起来很像这样:
-users-
id
name
etc.
-candidates-
user_id
type
etc.
现在我想要一个表logs
与candidates
具有一对多关系,因为候选人可以有零个或多个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 $primaryKey
和public $incrementing
属性来描述您的 Eloquent 模型中的主键。
【讨论】:
以上是关于Laravel - 如何将外键用于具有识别外键的表?的主要内容,如果未能解决你的问题,请参考以下文章