我在如何在laravel中设置我的表/关系时面临一些问题。
说明 用户可以有3种类型(租户,经理,管理员)。 admin是最简单的类型,它没有额外的属性。租户和经理拥有与每种类型相关的额外属性。此外,租户与单位的关系为1-1(假设现在每个单位有1个用户帐户),并且经理与属性有NN关系(多个经理可以管理1个属性,1个经理可以管理多个属性)。 / p>
到目前为止我想出了什么:
如何设置我的模型关系:
User.php
public function subaccount()
{
return $this->morphTo('subaccount');
}
Manager.php
和Tenant.php
public function user()
{
return $this->morphOne(User::class, 'subaccount');
}
优点:
缺点:
如何设置我的模型关系:
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);
}
优点:
缺点:
我希望能够对此有不同的看法,或者想以其他任何方式构建这个。
答案 0 :(得分:0)
如果您考虑使用户成为租户的原因,您可能会发现他们与单位的关系是唯一的。如果他们没有单位,租户就是一个用户。
因此:
class User {
public function Tenancy() {
return $this->hasOne(Tenancy::class);
}
}
...
class Tenancy {
public function Unit() {
return $this->belongsTo(Unit::class);
}
}
同样,您的经理只是经理,因为他/她管理多个房产。因此,您需要在用户和财产之间建立多对多的关系,并在枢轴上显示关系的详细信息。