1
我正面临着如何在laravel中设置我的表/关系的问题。复杂的Laravel关系
说明: 用户可以有3种类型(承租人,经理,管理员)。管理员是最简单的类型,它没有额外的属性。租户和经理拥有与每种类型相关的额外财产。此外,租户与单位之间存在1-1的关系(假设现在每个单位有1个用户帐户),并且经理与属性之间存在N-N关系(多个经理可以管理1个房产,1个经理可以管理多个房产)。
我想出什么了到目前为止:
方法1
如何我的模型关系将成立:
User.php
public function subaccount()
{
return $this->morphTo('subaccount');
}
Manager.php
和Tenant.php
public function user()
{
return $this->morphOne(User::class, 'subaccount');
}
优点:
- 没有hacky的代码。
缺点:
- 广东话建立外键约束,subaccount_id可以为空,如果 用户是管理员
- 我觉得用户应该不属于租户/经理,这 关系应该是其他方式
方法2
如何我的模型关系将成立:
Manager.php
和Tenant.php
这些都很好
public function user()
{
return $this->belongsTo(User::class);
}
User.php
需要像这样
public function subaccount()
{
if ($this->type === 'tenant') {
$resource = Tenant::class;
} else if ($this->type === 'manager') {
$resource = Manager::class;
}
return $this->hasOne($resource);
}
个
优点:
- 可以设置外键约束,没有subaccount_id
缺点:
- 我仿佛置身于用户是 “动态” 的关系很奇怪和 感觉哈克。
很想得到不同的观点或想法,我可以建立此任何其他方式。
模型用户 - >租赁 - >单元和用户 - >管理 - >属性,其中租赁和管理是枢纽? – Jason