首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >laravel雄辩关系3模型

laravel雄辩关系3模型
EN

Stack Overflow用户
提问于 2017-09-11 01:07:21
回答 1查看 908关注 0票数 2

我有一个Laravel5.4项目,其中有一些模型:ClientOwnerEmployee Bank (实际上它是银行帐户,但我选择了银行,以便在与外键建立关系时使用简单的命名约定)。

下面是一些事实:

  • 每个客户都可以有许多银行(银行账户)。
  • 每个所有者都可以拥有许多银行(银行账户)。
  • 每个雇员都可以有许多银行(银行账户)。
  • 每个银行(帐户)只能有一个客户或所有者或雇员

建立表格和关系的最佳方法是什么。我想到了以下几点:

表:

  • 客户: id,bank_id,其他字段.
  • 所有者: id,bank_id,其他字段.
  • 员工: id,bank_id,其他领域.
  • 银行: id,client_id,owner_id,employee_id,其他领域.

模型关系

  • 客户hasMany银行和银行belogsTo客户按Laravel指示完成
  • 所有者hasMany银行和银行belogsTo所有者
  • 员工hasMany银行和银行belogsTo员工

现在,当构建Blade视图表单(Create/Update)时,我应该有一个下拉菜单--例如,belongs_to字段中有客户端、所有者、雇员作为选项--因此,我可以筛选出三个表中的一个来选择银行帐户的holder的id来分配它。

劣势:

对于3个表中的一个表(如client_id = 36 )和其他两个表中的值始终为0的表( owner_id =0& employee_id = 0),每个银行一次只有一个活动外键。

这是建立关系的最好方式,还是还有更好的方法?如有可能,请提供银行的刀片视图表格。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-11 01:21:28

看起来是一个很好的多态关系候选人。

您的表结构将类似于:

  • 客户: id,其他字段..。
  • 房主:身份证,其他领域..。
  • 员工: id,其他领域..。
  • 银行: id,bankable_id,bankable_type,其他领域.

与您建议的结构的主要区别在于,我们没有在客户、所有者或雇员表中指定银行(因为他们可以有多个)。相反,我们指定银行属于哪种类型的用户使用bankable_id和bankable_type。

然后,在您的三个用户模型(客户、所有者和员工)中的每一个模型中,您都有以下内容(最好将其放在一个特性中):

代码语言:javascript
复制
public function banks()
{
    return $this->morphMany('App\Bank', 'bankable');
}

在您的银行模型中,您可以拥有:

代码语言:javascript
复制
public function bankable()
{
    return $this->morphTo();
}

它将返回拥有银行的用户(客户、所有者或雇员模型)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46146969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档