我正在使用与自己联系的表员工。
Employee
id
name
manager_id (FK to Employee)
我正在为员工使用以下模型:
public function my_employees()
{
return $this->hasMany('App\Employee', 'manager_id');
}
public function my_manager()
{
return $this->belongsTo('App\Employee', 'manager_id');
它工作正常,因为我可以在员工上使用my_employees功能,它将获取链接到该员工的所有记录。
现在我想获得一个表,其中包含所有员工,其中列manager_id被manager_name替换。我怎样才能用Eloquent实现这个目标?
不使用Eloquent,我这样做:
$employee = DB::table('employee')
->select('employee.id', 'employee.name', 'employee.manager_id','manager.name AS manager_name')
->join('employee AS manager', 'employee.manager_id','=','manager.id');
这当然让我得到了我想要的东西,但我想了解如何只用Eloquent来做。
感谢。
答案 0 :(得分:1)
完全一样。
$employees = Employee::select('employee.id', 'employee.name', 'employee.manager_id', 'manager.name AS manager_name')
->join('employee AS manager', 'employee.manager_id', '=', 'manager.id')
->get();
您也可以执行以下操作。但是,您需要从关系对象中访问管理器名称。
$employees = Employee::with('my_manager')->get();
foreach($employees as $employee) {
echo $employee->my_manager->name;
}
修改强>
您可以将任何约束添加到预先加载的关系中。
$employees = Employee::with(['my_manager' => function($query) {
$query->select('manager_id', 'name');
}])->get();