Eloquent 关系指向同一 table 中的记录
Eloquent relationship to point to records in the same table
我有一个员工table如下:
- id
- 姓名
- 主管
这里有所有员工,而且是我唯一的table
supervisor
字段,保存 supervisor
的 id
,与 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。
你的关系有问题,hasMany
和 belongsTo
方法的第二个参数需要是相关模型的外键(在这种情况下,相同的模型,但引用父对象的键,如 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
我有一个员工table如下:
- id
- 姓名
- 主管
这里有所有员工,而且是我唯一的table
supervisor
字段,保存 supervisor
的 id
,与 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。
你的关系有问题,hasMany
和 belongsTo
方法的第二个参数需要是相关模型的外键(在这种情况下,相同的模型,但引用父对象的键,如 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