我有一个Laravel5.4项目,其中有一些模型:Client、Owner、Employee、 Bank (实际上它是银行帐户,但我选择了银行,以便在与外键建立关系时使用简单的命名约定)。
下面是一些事实:
建立表格和关系的最佳方法是什么。我想到了以下几点:
表:
模型关系
现在,当构建Blade视图表单(Create/Update)时,我应该有一个下拉菜单--例如,belongs_to字段中有客户端、所有者、雇员作为选项--因此,我可以筛选出三个表中的一个来选择银行帐户的holder的id来分配它。
劣势:
对于3个表中的一个表(如client_id = 36 )和其他两个表中的值始终为0的表( owner_id =0& employee_id = 0),每个银行一次只有一个活动外键。
这是建立关系的最好方式,还是还有更好的方法?如有可能,请提供银行的刀片视图表格。
发布于 2017-09-11 01:21:28
看起来是一个很好的多态关系候选人。
您的表结构将类似于:
与您建议的结构的主要区别在于,我们没有在客户、所有者或雇员表中指定银行(因为他们可以有多个)。相反,我们指定银行属于哪种类型的用户使用bankable_id和bankable_type。
然后,在您的三个用户模型(客户、所有者和员工)中的每一个模型中,您都有以下内容(最好将其放在一个特性中):
public function banks()
{
return $this->morphMany('App\Bank', 'bankable');
}在您的银行模型中,您可以拥有:
public function bankable()
{
return $this->morphTo();
}它将返回拥有银行的用户(客户、所有者或雇员模型)。
https://stackoverflow.com/questions/46146969
复制相似问题