【问题标题】:Laravel eloquent with pivot tableLaravel 雄辩与数据透视表
【发布时间】:2016-11-26 01:09:24
【问题描述】:

我有这个表关系:

我已经正确建立了模型中的所有关系,但我不知道如何从工作类型表中获取名称

当我这样做时

dd($shift->shift_workers);

我明白了:

但我也想以某种方式从工作类型表中获取每个工人的名称...

这应该以某种方式使用 Pivot() 函数或什么来完成? 所以我可以有这样的东西:

$foreach ($shift->shift_workers as $w => $worker)
    echo $worker->name;

但我不知道该怎么做...有人可以帮忙吗?

【问题讨论】:

  • 您能否在问题中添加您的关系方法以及查询$shift 的方式?
  • 我已经用 implode($worker->worktype->pluck('id')->toArray()) 解决了这个问题,现在我得到了名字,实际上我得到了一个 ID 号,但这是我的选择框,所以得到显示的名字。

标签: laravel


【解决方案1】:

很明显,应该跳过数据透视表,所以结果是通过以下方式实现的,这在逻辑上是正确的:

$worker->worktypes->first()->name; // to get the name of the first work type
$worker->worktypes->pluck('name'); // to get all names as an array

要达到这个结果,请关注Laravel's naming convention 并正确设置模型关系。

  1. worker_worktype_pivot 表重命名为worker_worktype
  2. Worker 模型中设置关系:

`

class Worker extends Model {
    ...
    public function workTypes()
    {
        return $this->belongsToMany(WorkType::class);
    }
}

【讨论】:

  • 如果我不使用数据透视表......我的工作模型中的 workTypes 关系不应该是您指定的 belongsTo() 而不是 belongsToMany() 吗?
  • belongsTo吗?您的屏幕截图显示它是belongsToMany (1 → ∞)。如果是belongsTo,就不需要数据透视表
  • 在您发表评论后我所做的是我删除了我的数据透视表并将工作人员直接连接到工作类型,在工作人员中添加了外键(我会工作类型),现在我没有数据透视表完全......我现在没有时间,但我今晚可能会回来,但我想解决这个问题
猜你喜欢
  • 2020-03-19
  • 2018-05-17
  • 2020-06-20
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2018-06-30
相关资源
最近更新 更多