Laravel在3张桌子上雄辩的关系

时间:2016-01-10 14:31:35

标签: php laravel laravel-5 eloquent

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

第一个表格为GROUPS,第二个表格为CONTACTS,最后一个表格为PHONE_NUMBERS

我正在使用Laravel Framework。问题是,我不知道使用的雄辩关系,我想显示GROUPS表的内容,而CONTACTS将显示在GROUPSPHONE NUMBERS将显示在CONTACTS下方。

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

enter image description here

1 个答案:

答案 0 :(得分:2)

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

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();

这将为您提供一组群组。每个组都将在其联系人属性中包含一组联系人。每个联系人都会在 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