【问题标题】:Laravel - Get values from pivot table column, using pivot tables unique row IDLaravel - 从数据透视表列中获取值,使用数据透视表唯一行 ID
【发布时间】:2017-05-17 23:32:32
【问题描述】:

我正在尝试根据我为每一行提供的唯一递增 ID 来确定是否有某种方法可以获取数据透视表中两列的值。

我有一个 Job 模型、一个 Location 模型和一个 Application 模型。

Job 和 Location 与数据透视表“job_location”具有多对多关系。它包含的两个外键是 job_id 和 location_id。但是,我还为每一行赋予了一个唯一的递增 ID,jobloc_id。

如果我只有jobloc_id,如何查看其他两列的值?

 $jobLoc = $location->jobs->wherePivot('jobloc_id', '=', 1);
 return $jobLoc->job_id;

返回“不存在 Pivot 的方法”,即使我已经看到使用它的人的引用。我所拥有的只是 jobloc_id,并且正在尝试基于此查找其他两个值,以便我可以完全加载 Job 和 Location 以从中提取属性。

任何指针将不胜感激。这是在 Laravel 5.3 中。

【问题讨论】:

  • 数据透视表并不意味着有一个 ID 列,你可能正在尝试做一些你不应该做的事情。
  • 在数据库理论中,数据透视表没有@AntoineB 所说的 ID 列,而是它们的主键是两个关系参与者的组合。您可以使用两种奇怪的解决方案,将 Job 和 Location 之间的关系提升为实体,并在其上有两个 N-1 关系,一个与 Job 相关,另一个与 Location 相关。或者干脆使用 Laravel 查询生成器
  • @AntoineB 在数据透视表上拥有唯一的 ID 列没有任何问题。这不是必需的,但它可能很有用。我经历过的多个指南都说他们仍然会添加一个。我实际上是在尝试访问工作位置与一个数字的组合。

标签: laravel laravel-5.3


【解决方案1】:

如果您已将 ID 添加到数据透视表(例如jobloc_id)并且您想按 ID 获取行,只需使用查询生成器:

DB::table('job_location')->where('jobloc_id', 1)->first();

当您在数据透视表中拥有唯一的行 ID 时,这是最快、最简单的方法。

【讨论】:

  • 试过了,效果很好。然而,最终只为数据透视表制作了一个模型,这给了我更多的控制权。
猜你喜欢
  • 2016-12-06
  • 2014-08-24
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
相关资源
最近更新 更多