我有一个相当复杂的用户架构需求,我想知道在laravel 4中构建模型的最佳方法。我尝试使用数据透视表,但没有成功。为了保密,我每桌只放了几个字段。Laravel 4 Model雄辩的关系
用户
- ID
- 名
型材
- ID
- 提供商 个
地址
- ID
- COUNTRY_ID
- 城市
国家
- ID
- 名
公司
- ID
- 名
商店
- ID
- 名
下面是规则:
- 用户可以有多个地址(发货,开票......)
- 用户可以有多个配置文件(用于社会登录,在脸书上,谷歌...)
- 用户可以有很多公司(用户可以拥有多个公司)
- 用户可以有许多商店(用户可以拥有多个商店)
- 档案可以有一个用户
- 地址可以有一个用户(一个地址可以被称为只有一个用户)
- 地址可以有一个公司(地址可以被称为只有一家公司)
- 地址可以有一个店
- 地址可以有一个国家
- 国家可以有多个地址
- 公司可以有多个地址(发货,开票......)
- 公司可以有许多商店
- 公司可以有很多用户
- 店可以有多个地址(运费,结算...)
- 店可以有许多用户
- 店可以有一个公司
我不是寻找“”的答案写下来,我做模型,但在我看来,逻辑不够好。例如,这里的用户和地址类:
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');
}
}
构建模型以这样的方式意味着,口才预计在地址表中找到“USER_ID”字段。在我看来,最好使用数据透视表,因为地址可以属于用户,公司和商店,所以在地址表中使用user_id,company_id和shop_id表字段或使用三个数据透视表(user_address, company_address和商店地址)?
数据透视表将为用户和公司构建,因为它是一个多元关系。
我要感谢他,但它的工作原理,如果在用户级的我用
public function addresses() {
return $this->morphMany('Address', 'addressable');
}
,并在地址I类使用
public function addressable() {
return $this->morphTo();
}
在这种@MartinBean答案后方式我可以轻松打印检索第一个当前用户地址
$user->addresses->first()->address
,并从当前用户
Address::first()->addressable->email
的首地址获取用户的电子邮件,但你向我指出正确的方向,我认为,多态关系,只是为了更好地理解它为什么不转动?你认为枢轴对用户 - 公司关系来说是否必要?
你尝试过这么远吗? Stack Overflow不是让专业开发人员免费为你工作的网站。 – 2014-12-01 17:25:28
嗨@MartinBean,阅读更好的我的问题你是对的,似乎我要求一个工作,但事实并非如此,我写了一个更新,请回滚投票。谢谢 – poisons 2014-12-01 18:11:23
我制作了'Address'多态,因为您希望能够在多个模型中使用地址。对于加入模型 - 就像属于公司的用户 - 然后我会使用数据透视表。 – 2014-12-03 16:29:45