【问题标题】:Laravel 5.2 RelationshipLaravel 5.2 关系
【发布时间】:2016-06-04 11:32:30
【问题描述】:

我熟悉如何使用 Eloquent 关系,但我很难理解这种特殊情况。

我有 usersaddresses 表。

一个用户可以有多个地址,但用户也可以共享一个地址。所以我需要创建一个user_addresses 表。

user_addresses 表如下所示...

iduser_idaddress_id

如何设置我的关系,以便检索特定用户的所有地址,这样我就可以执行$user_addresses = $user->addresses() 之类的操作

【问题讨论】:

  • 您是否增加了超出需要的复杂性?每个用户都有自己的一组地址有什么问题,即使这些地址恰好包含相同的信息?
  • @GeorgeCummins 一种情况可能是默认地址,更新时检查它是否是默认地址,如果他有默认地址,则创建一个新地址。
  • 所以,你还不够熟悉:p

标签: php laravel eloquent laravel-5.2


【解决方案1】:

您正在寻找使用belongToMany 的Many To Many 关系:

在您的用户模型中

public function addresses(){
    return $this->belongsToMany('App\Address', 'user_addresses');
}

您可以调用 $user->addresses 来访问这些值,如果您将用户传递给您的视图,则无需将它们放入变量中,您只需调用 $user->addresses 即可。

如果您将表重命名为“address_user”,您可以使用:

return $this->belongsToMany('App\Address');

表的名称是根据相关模型名称的字母顺序得出的。

【讨论】:

  • 不幸的是,如果他在数据透视表中没有名为 addresses_id 的列,您的第一个答案将不起作用。
  • @FilipKoblański 不,你可以使用 address_id 因为模型的名称使用 + _id。
  • 你说得对 :) 我的错误,对不起...为你 +1
  • @FilipKoblański 没问题我只是好奇我是否错过了什么。
猜你喜欢
  • 2023-04-06
  • 2016-11-01
  • 2016-06-23
  • 2016-06-12
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多