在Laravel中如何与同一张桌子建立2个关系?

时间:2018-10-30 18:32:36

标签: php laravel

Laravel的关系遇到一些麻烦,不确定是否有解决方案,但希望你们能帮助我。 因此,假设我有2个表 USERS TRAINEES 。可以将用户视为公司,管理员,指导员取决于字段角色。 关于关系作为公司的用户可以有很多TRAINEES,但作为指导者也可以有很多TRAINEES。那么在这种情况下,我如何建立它们之间的关系?表TRAINEES应该具有 COMPANY_ID INSTRUCTOR_ID 字段?或如何?但这是 USERS 表。我不知道你是否清楚。问我吧。依靠你们

1 个答案:

答案 0 :(得分:0)

设计用户和受训者表,如下所示:

用户表的列/字段:

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

学员表的列/字段:

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

然后在您的学员模型中,执行以下操作:

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

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

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

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');
    }

在控制器和其他地方使用这些关系。这没有经过测试,但是应该不会太过马车。别忘了用有效的数据为数据库播种,尤其是对于ID。