Laravel eloquent表加入了自身,如何获得所有值的1个数组

时间:2017-06-02 12:10:27

标签: laravel

我正在使用与自己联系的表员工。

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来做。

感谢。

1 个答案:

答案 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();