gpt4 book ai didi

mysql - Laravel 4 模型 Eloquent 关系

转载 作者:行者123 更新时间:2023-11-29 23:21:58 25 4
gpt4 key购买 nike

我有一个相当复杂的用户模式需求,我想知道在 laravel 4 中构建模型的最佳方法。我尝试使用数据透视表,但没有成功。为了简单起见,我在每个表中只放置了几个字段。

用户

  • ID
  • 姓名

个人资料

  • ID
  • 提供商

地址

  • ID
  • 国家ID
  • 城市

国家

  • ID
  • 姓名

公司

  • ID
  • 姓名

商店

  • ID
  • 姓名

规则如下:

  1. 用户可以有多个地址(送货地址、账单地址...)
  2. 用户可以拥有多个个人资料(用于社交登录、Facebook、Google...)
  3. 用户可以拥有许多公司(用户可以拥有多个公司)
  4. User can have many Shops(用户可以拥有多个商店)
  5. 个人资料可以有一个用户
  6. 地址可以有一个用户(一个地址只能引用一个用户)
  7. 地址可以有一家公司(一个地址只能引用一家公司)
  8. 地址可以有一个商店
  9. 地址可以有一个国家/地区
  10. 国家/地区可以有多个地址
  11. 公司可以有多个地址(送货地址、账单地址...)
  12. 公司可以拥有许多商店
  13. 公司可以拥有许多用户
  14. 商店可以有多个地址(送货地址、账单地址...)
  15. 商店可以有许多用户
  16. 商店可以拥有一个公司

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

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');
}
}

以这种方式构建模型意味着 Eloquent 期望在地址表中找到“user_id”字段。在我看来,最好使用数据透视表,因为地址可以属于用户、公司和商店,因此最好在地址表中包含 user_id、company_id 和 shop_id 表字段,还是使用三个数据透视表(user_address、公司地址和商店地址)?

数据透视表肯定是为用户和公司构建的,因为它是多对多关系。

<小时/>

@MartinBean 回答后我想感谢他,但如果在我使用的 User 类中它就有效

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

在我使用的 Address 类中

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

这样我就可以轻松打印检索第一个当前用户地址

$user->addresses->first()->address

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

Address::first()->addressable->email

但我认为你给我指出了正确的方向,即多态关系,只是为了更好地理解它,为什么不进行枢转呢?您认为枢轴对于用户与公司的关系是否有必要?

最佳答案

查看地址,如果您希望它也可用于其他模型,您可能需要使用多态关系。这看起来像这样:

<?php

class Address extends Eloquent {

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

}

然后在其他模型中像这样:

<?php

class User extends Eloquent {

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

}

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

关于mysql - Laravel 4 模型 Eloquent 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27233652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com