【问题标题】:Laravel Eloquent Relationships on 3 tablesLaravel Eloquent 关系在 3 个表上
【发布时间】:2016-04-14 21:05:00
【问题描述】:

请我有 3 个要显示的表,但其中 3 个表是相关的。

第一个表是GROUPS,第二个是CONTACTS,最后一个是PHONE_NUMBERS

我正在使用 Laravel 框架。问题是,我不知道要使用的雄辩关系,我想显示GROUPS 表的内容,而CONTACTS 将显示在GROUPS 下,PHONE NUMBERS 将显示在@ 下987654329@。

请告诉我如何实现这一目标。 附件是完成后的外观图片。

【问题讨论】:

  • 伙计...你真的应该考虑重写你的问题。如果你不能清晰、简洁、易于理解地表达人类的思想,恐怕就更难跳入一些代码或查询了:)
  • @JimRaynor 描述可能有点复杂,但图像很容易解释:)。
  • @Bogdan 我知道 :) 我在发表评论之前看到了这张图片。仅仅经过一些简单的编辑,这个问题至少已经更具可读性了。然而,它是由社区编辑的,而不是由提问者编辑的——我希望他能回顾一下他的问题并尝试自己进行修改。

标签: php laravel laravel-5 eloquent


【解决方案1】:

每个组可以有多个联系人,每个联系人可以有多个电话号码,您需要定义组到联系人以及联系人到电话号码的一对多关系:

class Group extends Model {
  public function contacts() {
    return $this->hasMany(Contact::class);
  }
}

class Contact extends Model {
  public function phoneNumbers() {
    return $this->hasMany(PhoneNumber::class);
  }
}

定义关系后,您将能够加载组、他们的联系人和联系人的电话号码:

$groups  = Group::with(['contacts', 'contacts.phoneNumbers'])->get();

这将为您提供一组组。每个组将在其 contacts 属性中包含一组联系人。每个联系人都将在其 phoneNumbers 属性中包含电话号码集合。通过遍历这些集合,您应该能够获得渲染所需结构所需的数据,例如:

@foreach($groups as $group)
  {{ $group->name }}
  @foreach ($group->contacts as $contact)
    {{ $contact->name }}
    @foreach ($contact->phoneNumbers as $number)
      {{ $number->number }}
    @endforeach
  @endforeach
@endforeach

有关如何使用 Eloquent 建模数据的所有必要信息都可以在文档中找到:https://laravel.com/docs/master/eloquent

【讨论】:

  • 非常感谢@jedrzej.kurylo
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 2016-05-02
  • 1970-01-01
  • 2019-06-23
相关资源
最近更新 更多