2015-08-09 6 views
2

У меня есть две модели, сотрудники и отделы, я хотел бы получить все данные от сотрудника, включая его отдел, что-то вроде этого:Как получить данные из двух связанных таблиц в laravel 5?

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; 

Результатом этого является:

------------------------------------------ 
| Firstname | Surname | Age | Department | 
------------------------------------------ 
| John  | Doe  | 25 | Finance | 

Как я могу получить тот же результат в Laravel 5?

Я знаю, что я могу получить все данные модели, как это:

$data = Employees::all(); 

Но я нужен столбец отдела в качестве значения родительской таблицы.

Использование Query Builder это выглядит как этот

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

И с помощью красноречивых это выглядит как этот

Модель

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

Контроллер

$data->employees = Employees::with('department')->get(); 

Используя конструктор запросов я могу передать данные через @include и доступ к ней, как это:

app.blade.php

@include('Club.index.employees',['employees'=>$data->employees]) 

employees.blade.php

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

member.blade.php

<h3>{{ $employee->Firstname }}</h3> 
<p class="member-surname">{{ $employee->Surname }}</p> 
... 

И это работает, но когда я использую Eloquent, он не отображает поля от родителя, например Departments.Name, я не знаю, если что-то не хватает, когда вы вызываете его в представлении. Также я хотел бы знать, как можно использовать псевдонимы для столбцов таблицы.

ответ

4

В вашей модели Employee создать функциональный отдел

public function department() 
    { 
     return $this->hasMany('App\Department'); 
    } 

Тогда в контроллере сделать как этот

$results = Employee::with('department')->get(); 

Это, как вы получите все отделы работника, но убедитесь, что оба таблица связана на основе внешнего ключа

+0

И как я могу установить псевдонимы? –

+0

Это не работает. Запрос генерирует ошибку, он генерирует этот запрос: 'select * from department, где department.employees_id в (1, 2)'. Я хочу получить данные от сотрудников не из отделений –

Смежные вопросы