首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在拉勒维尔如何使两个关系到同一张桌子?

在拉勒维尔如何使两个关系到同一张桌子?
EN

Stack Overflow用户
提问于 2018-10-30 18:32:35
回答 1查看 72关注 0票数 0

拉拉维尔的关系有一些问题,不确定有什么解决办法,但希望你们能帮我。因此,假设我有两个表,用户、受训者。用户可以认为是公司,管理员,教员取决于字段角色。关于关系,用户作为公司可以有很多学员,也可以作为指导员有很多学员。那么,在这种情况下,我如何在他们之间建立关系呢?表学员应该有字段COMPANY_IDINSTRUCTOR_ID?或者怎么做?但是它是相同的表用户。我不知道你是否清楚。就问我吧。指望你们

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-30 19:21:39

用户和受训人员表的设计如下:

用户表列/字段:

  • id (主键)
  • 用户名(字符串)
  • 角色(字符串、索引)

受训人员表格栏/字段:

  • id (主键)
  • 名称(字符串)
  • trainer_id (整数,索引)
  • company_id (整数,索引)

然后在受训者模型中执行以下操作:

代码语言:javascript
复制
public function trainer()
    {
        return $this->belongsTo('App\User', 'trainer_id');
    }

public function company()
    {
        return $this->belongsTo('App\User', 'company_id');
    }

用户模型中,执行以下操作:

代码语言:javascript
复制
public function trainees()
    {
        if($this->attributes["role"] == "company")
            return $this->companyTrainees();
        if($this->attributes["role"] == "instructor")
            return $this->instructorTrainees();
        return array();
    }

public function companyTrainees()
    {
        return $this->hasMany('App\Trainee', 'trainer_id');
    }

public function instructorTrainees()
    {
        return $this->hasMany('App\Trainee', 'company_id');
    }

在控制器和其他地方使用这些关系。这是没有测试,但它不应该太坏。不要忘记为数据库添加有效数据,特别是对于ids。

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

https://stackoverflow.com/questions/53070754

复制
相关文章

相似问题

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