Eloquent 关系指向同一 table 中的记录

Eloquent relationship to point to records in the same table

我有一个员工table如下:

这里有所有员工,而且是我唯一的table

supervisor 字段,保存 supervisorid,与 employee.[=24 保存在相同的 table 中=]

我有一个 table 打印出所有 employees 及其 supervisors.

的列表

现在,它只打印主管的id。我正在尝试将 id 翻译成 supervisor 的名称。所以我决定在同一个模型中使用 'belongsTo()' & 'hasMany()'。

我尝试了多种型号和控制器代码,但每次都会弹出不同的错误。我认为我的控制器方面是问题所在。

员工模型

//
public function employee(){
    return $this->belongsTo('Employee', 'id');
}

public function manager(){
    return $this->hasMany('Employee', 'id');
}

员工控制人

$employees = Employee::all();
return view('employee/index')->with('employees', $employees, $employees->manager);

索引

<td>
   {{$employee->$manager->name}}
</td>

每个员工都有多个经理,所以不存在$employees->manager

试试这个:

$employees = Employee:: with ('manager')->get(); 
return view('employee/index')->with('employees', $employees);

在这个答案中,我假设 supervisor 是主管的员工 ID。


你的关系有问题,hasManybelongsTo 方法的第二个参数需要是相关模型的外键(在这种情况下,相同的模型,但引用父对象的键,如 supervisor)。检查关于这个主题的documentation

Like the hasOne method, you may also override the foreign and local keys by passing additional arguments to the hasMany method:

return $this->hasMany('App\Comment', 'foreign_key');

return $this->hasMany('App\Comment', 'foreign_key', 'local_key');

你应该这样定义你的关系:

Employee.php

// a Manager has many employees
public function employees(){
    return $this->hasMany(Employee::class, 'supervisor'); 
}

// an Employee works for a Manager
public function manager(){
    return $this->belongsTo(Employee::class, 'supervisor');
}

然后在你的控制器中:

app/Http/Controllers/SomeCoolController.php

$employees_with_manager = Employee::with('manager')->get();

return view('employee/index')->with('employees', $employees_with_manager);

所以在您看来这样做就足够了:

employee/index.blade.php

@foreach ($employees as $employee)
    <td>
       {{ $employee->manager->name }}
    </td>
@endforeach