【问题标题】:Laravel - How to use a foreign key to a table with an identifying foreign key?Laravel - 如何将外键用于具有识别外键的表?
【发布时间】: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)拥有日志。如果“一”部分没有主键,就无法建立一对多关系。

标签: php database laravel foreign-keys


【解决方案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 模型中的主键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多