首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 4模型雄辩关系

Laravel 4模型雄辩关系
EN

Stack Overflow用户
提问于 2014-12-01 17:15:34
回答 1查看 258关注 0票数 0

我有一个相当复杂的用户模式嵌套,我想知道在laravel 4中构建模型的最佳方法。我尝试使用pivot表,但没有成功。对于半性,我在每个表中只放了几个字段。

用户

  • id
  • 名字

配置文件

  • id
  • 提供程序

地址

  • id
  • country_id
  • 城市

countries

  • id
  • 名字

公司

  • id
  • 名字

商店

  • id
  • 名字

以下是规则:

  1. 用户可以有多个地址(送货,计费.)
  2. 用户可以有许多个人资料(用于社交登录,在facebook,谷歌.)
  3. 用户可以拥有多家公司(用户可以拥有多家公司)
  4. 用户可以拥有多家商店(用户可以拥有多家商店)
  5. 配置文件可以有一个用户。
  6. 地址可以有一个用户(一个地址只能引用一个用户)
  7. 地址可以有一个公司(一个地址只能指一个公司)
  8. 地址可以有一个商店
  9. 地址可以有一个国家
  10. 国家可以有许多地址
  11. 公司可以有许多地址(运输,帐单.)
  12. 公司可以有很多商店
  13. 公司可以有很多用户。
  14. 商店可以有许多地址(运输,帐单.)
  15. 商店可以有很多用户
  16. 商店可以有一家公司

我不是在寻找写下来的“那个”答案,我做了模型,但在我看来,逻辑不够好。例如,下面是用户和地址类:

代码语言:javascript
复制
class User extends SentryUserModel implements UserInterface, RemindableInterface {
  use UserTrait, RemindableTrait;
  public function addresses() {
    return $this->hasMany('Address');
  }
}

class Address extends Eloquent {
  public function user() {
    return $this->belongsTo('User');
  }
}

以这种方式构建模型意味着雄辩者希望在address表中找到"user_id“字段。在我看来,使用枢轴表应该更好,因为地址可以属于用户、公司和商店,那么在address表中设置user_id、company_id和shop_id表字段更好,还是使用三个枢轴表(user_address、company_address和商店地址)?

支点表将为用户和公司构建,因为它是一种多方面的关系。

在@MartinBean回答之后,我想感谢他,但是如果我在用户类中使用

代码语言:javascript
复制
public function addresses() {
  return $this->morphMany('Address', 'addressable');
}

在我使用的Address类中

代码语言:javascript
复制
public function addressable() {
  return $this->morphTo();
}

通过这种方式,我可以轻松地打印以检索当前的第一个用户地址。

代码语言:javascript
复制
$user->addresses->first()->address

并从当前用户的第一个地址检索用户电子邮件。

代码语言:javascript
复制
Address::first()->addressable->email

但是你给我指明了正确的方向,我认为,多态关系,只是为了更好地理解它,为什么不支点呢?你认为枢轴对于用户和公司的关系是必要的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-01 18:19:24

查看地址,如果希望多态关系也可用于其他模型,则可能希望使用多态关系。这个应该是这样的:

代码语言:javascript
复制
<?php

class Address extends Eloquent {

    public function addressable()
    {
        return $this->morphTo('addressable');
    }

}

然后在你的其他模型中:

代码语言:javascript
复制
<?php

class User extends Eloquent {

    public function addresses()
    {
        return $this->morphMany('Address', 'addresses');
    }

}

这里有更多关于多态关系的信息:http://laravel.com/docs/4.2/eloquent#polymorphic-relations

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27233652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档