Конвертировать запрос в Eloquent - PullRequest
1 голос
/ 17 января 2020

Как сделать этот запрос с красноречивым

SELECT employees.first_name, companies.name FROM employees
JOIN companies ON employees.company_id = companies.id

Мои отношения

public function employees()
{
    return $this->hasMany(Employee::class);
}

public function company()
{
    return $this->belongsTo(Company::class);
}

Я выбираю имя с заданным идентификатором, но как мне найти его для всех. Или, может быть, я ошибаюсь

$employee = $employee->all()->find($id)->company->name;

Ответы [ 3 ]

3 голосов
/ 17 января 2020

Я принял ваше employees Название модели как Employee и companies Имя модели как Company

$employees = Employee::with('company')->get();

if(!empty($employees)){
    foreach($employees as $employee){
        echo $employee->first_name;
        echo $employee->company->name;
    }
}

Если вы хотите выполнить поиск по идентификатору, вы можете сделать следующее:

$employee = Employee::with('company')->find($id);
echo $employee->company->name;
2 голосов
/ 17 января 2020
$employee = Employee::where('employees.id',$id)
            ->join('companies','companies.id','=','employees.company_id')
             ->select('employees.first_name', 'companies.name')
              ->first();
0 голосов
/ 17 января 2020

Ёлки Из всего этого очень плохая практика:

$employee = $employee->all()->find($id)->company->name;

Возвращает всю коллекцию сотрудников, а затем ищет в ней идентификатор. Вы можете просто использовать Employee::find($id)

Теперь о вашем запросе, так как я полагаю, что в модели вашей компании много сотрудников, и если вы хотите найти всех сотрудников компании, вам нужно сделать следующее:

$company->employees()->select('first_name')->get(); // Collection of Employee

Если вы хотите указать c сотрудника компании с идентификатором сотрудника, вы можете сделать:

$company->employees()->select('first_name')->where('id', $id)->first(); // null or Employee
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...