【问题标题】:Laravel 5.1 Polymorphic relationship Or Regular RelationshipLaravel 5.1 多态关系或正则关系
【发布时间】:2015-12-19 18:14:16
【问题描述】:

我的代码中有三个模型公司、用户和员工

User
 id
 name

Company
 id
 name

Employee
 employer_id // foreign key to id on company table
 employable_id
 employable_type
  • 用户可以拥有多家公司作为所有者/董事/总裁
  • 用户不能直接拥有任何员工
  • 公司只能有一个用户作为所有者/董事/总裁
  • 公司可以有很多员工
  • 员工可以有一个雇主,即公司
  • 员工可以有多个用户或公司作为员工 - 雇主永远是一家公司
    • 一个公司作为雇主,可以雇用另一家公司作为雇员或用户作为雇员...
    • 因此公司可以与雇员表有两种关系,即作为雇员本身和作为雇主。
    • 用户不得直接雇佣任何人
    • 用户只能通过公司雇用员工..

我无法弄清楚我可以在这里使用什么样的关系,以便我可以将用户和公司作为雇员,也可以将公司作为雇主。

-- 编辑 我有以下表结构:

Employee Table ->
        employer_id' // Only company_id
        employee_person_id // user_id
        employee_company_id // Company_id as an employee
        employee_type // company or person
        name // name of company acting as employee or user full name
        email // email of company acting as employee or user email

        $table->foreign('employer_id')
            ->references('id')->on('companies')
            ->onDelete('cascade');

        $table->foreign('employee_person_id')
            ->references('id')->on('users')
            ->onDelete('cascade');

        $table->foreign('employee_company_id')
            ->references('id')->on('companies')
            ->onDelete('cascade');

我的员工类有以下方法

class Employee extends Model 
{
   public function employedBy()
   {
     return $this->belongsTo(\App\Models\Company::class, 'employer_id');
   }

   public function employedPerson()
   {
     return $this->belongsToMany(\App\Models\User::class,   'employee_person_id');
    }

   public function employedCompany()
   {
      return $this->belongsToMany(\App\Models\Company::class, 'employee_company_id');
    }
}

我的公司有以下方法

class Company extends Method
{
  public function employees()
  {
    return $this->hasMany(\App\Models\Employee::class, 'employer_id');
  }

  public function employers()
  {
    return $this->belongsToMany(\App\Models\Employee::class, 'employee_company_id');
  }
}

我的用户有以下方法

class User extends Method
{
  public function companies()
  {
    return $this->hasMany(\App\Models\Company::class, 'user_id');
  }

  public function employers()
  {
    return $this->belongsToMany(\App\Models\Employee::class, 'employee_person_id');
  }
}

好的,现在让我分步解释:

  1. 公司想雇佣员工(员工可以是任何其他公司或个人)
  2. 公司通过电子邮件搜索员工
  3. 已搜索的公司或人员已添加到员工表中

--另外,当我查询我希望同时拥有受雇用户和受雇公司的所有员工时,请建议我通过员工表获取加入用户和公司的列表的方法--

// I want to write something like this
$company->getEmployees() = // to get detail list of employees and companies in one single collection

【问题讨论】:

    标签: database-design polymorphism eloquent laravel-5.1


    【解决方案1】:

    我认为你不需要多态。如果您的公司和用户只能受雇于一名员工,那么他们的表将包含一个employee_id,并且他们都将属于作为雇主的员工(拥有许多用户和公司);但是,如果他们可以被多个用户雇用,那么您需要创建两个数据透视表并将它们定义为与员工的多对多关系。

    所以,

    用户和公司 = 一对多

    • 一个用户拥有许多公司
    • 公司属于一个用户

    公司和员工 - 一对多

    • 一家公司有很多员工
    • 一名员工属于一家公司

    员工(作为雇主)和公司 - 一对多:

    • 一名员工拥有许多公司
    • 一家公司有一个员工

    或多对多:

    • 一名员工拥有许多公司
    • 一家公司有很多员工

    员工(作为雇主)和用户 = 一对多:

    • 一位员工有很多用户
    • 用户有一个员工

    或多对多:

    • 一名员工有很多用户
    • 一个用户有很多员工

    当员工实际上是雇主时,您可能需要考虑如何命名模型中关系定义的方法,例如

    //User model
    
    public function employer () {
        return $this->belongsTo('App\Employee')
    }
    

    ...什么的。

    希望我正确理解了您的问题。

    【讨论】:

    • 感谢蒂莫西的回复,我明白你的意思。我已经更新了我的问题,以更多地解释我的情况。公司可以雇用另一家公司或个人作为员工..但用户不能雇用任何人。用户只能拥有可以招聘的公司。它就像现实世界。我还需要一种方法来获取公司雇用的所有员工,无论是另一家公司还是个人。
    猜你喜欢
    • 2016-06-03
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多