【问题标题】:How in Laravel make 2 relations to same table?Laravel 如何与同一张表建立 2 个关系?
【发布时间】:2018-10-31 03:21:39
【问题描述】:

在 Laravel 中遇到一些问题,不确定是否有任何解决方案,但希望你们能帮助我。 因此,假设我有 2 个表 USERSTRAINEES。用户可以被视为公司、管理员、讲师,取决于字段角色。 关于关系 用户作为公司可以有很多实习生,但作为讲师也可以有很多实习生。那么在这种情况下,我该如何建立它们之间的关系呢?表 TRAINEES 应该有字段 COMPANY_IDINSTRUCTOR_ID 吗?或如何?但它是同一张表USERS。我不知道你是否清楚。尽管问我。指望你们

【问题讨论】:

  • 我不会在第二个表中进行区分,依赖于用户表中的数据depends on field role 原因是您仍然需要知道要加入相同外键的两个副本(如果我明白你在说什么),你将不得不保持它。相反,只需加入用户表并检查角色。而不是COMPANY_ID and INSTRUCTOR_ID 使用USER_IDROLE
  • stackoverflow.com/questions/17567305/… 可能会为您指明正确的方向。
  • 我通常会选择role, role_user, user,这样学员可以成为用户,并且如果需要,用户也可以成为学员。

标签: php laravel


【解决方案1】:

如下设计用户和学员表:

用户表列/字段:

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

受训者表列/字段:

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

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

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

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

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

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。

【讨论】:

  • 非常感谢。我喜欢你的解决方案,我认为你给了我正确的方向。它需要很少的变化,并且将是完美的。总之谢谢
  • 请说明更改,以便我更新答案,它可能对其他人有用
  • 我认为除了 User 模型中的方法实习生之外,这里都是完美的。我还没有写代码,但我认为在我的情况下不会有“如果”条件)
猜你喜欢
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 2022-06-16
  • 2019-10-15
  • 2021-05-24
  • 2020-02-21
  • 1970-01-01
  • 2018-02-15
相关资源
最近更新 更多