如何从laravel 5中的两个相关表中获取数据?

Jon*_*ano 3 model query-builder laravel laravel-5

我有两个模型employee and Departments,我想从雇员那里获得所有数据,包括部门,像这样:

SELECT e.Firstname, e.Surname, e.Age, d.Name as Department FROM Employees as e INNER JOIN Departments as d ON e.Department = d.ID;
Run Code Online (Sandbox Code Playgroud)

结果是:

------------------------------------------
| Firstname | Surname | Age | Department |
------------------------------------------
| John      | Doe     | 25  | Finance    |
Run Code Online (Sandbox Code Playgroud)

我如何在Laravel 5中获得相同的结果?

我知道我可以像这样获得模型的所有数据:

$data = Employees::all();
Run Code Online (Sandbox Code Playgroud)

但是我需要Department列作为父表的值。

使用查询生成器看起来像这样

 DB::table('Employees')
            ->join('Departments', 'Employees.Department', '=', 'Departments.ID')
            ->select('Employees.Firstname', 'Employees.Surname', 'Employees.Age', 'Departments.Name')
            ->get();
Run Code Online (Sandbox Code Playgroud)

使用口才,看起来像这样

模型

public function department()
{
    return $this->belongsTo('App\Departments','Department','ID');
}
Run Code Online (Sandbox Code Playgroud)

控制者

$data->employees = Employees::with('department')->get();
Run Code Online (Sandbox Code Playgroud)

使用查询构建器,我可以@include像这样传递数据并对其进行访问:

app.blade.php

@include('Club.index.employees',['employees'=>$data->employees])
Run Code Online (Sandbox Code Playgroud)

employee.blade.php

@foreach($employees as $employee)
    @include('Club.index.member',['employee'=>$employee])
@endforeach
Run Code Online (Sandbox Code Playgroud)

member.blade.php

<h3>{{ $employee->Firstname }}</h3>
<p class="member-surname">{{ $employee->Surname }}</p>
...
Run Code Online (Sandbox Code Playgroud)

它可以工作,但是当我使用Eloquent时,它不会像Departments.Name在这种情况下那样显示来自父级的字段,我不知道在视图中调用它时是否缺少某些内容。我也想知道如何为表列使用别名。

Kha*_*ukh 6

在您的模型Employee中创建一个职能部门

public function department()
  {
      return $this->hasMany('App\Department');
  }
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器中这样做

$results = Employee::with('department')->get();
Run Code Online (Sandbox Code Playgroud)

这是您将获得员工所有部门的方法,但请确保两个表都基于外键关联