#eloquent #laravel-7 #laravel-query-builder
#красноречивый #laravel-7 #laravel-конструктор запросов
Вопрос:
Я новичок в Laravel и пытаюсь выбрать определенные столбцы из двух разных таблиц, используя leftJoin
:
public function show(Request $request, Employee $employee)
{
$empno = Employee::find($employee);
$employees = DB::table('employees')
->select('employees.empno','employees.firstname', 'employees.lastname','employee_backgrounds.email','employees.remarks')
->leftJoin('employee_backgrounds', 'employees.empno', '=', 'employee_backgrounds.empno')
->where('employees.empno', '=', $empno)
->get();
return $employees;
}
И вот мой запрос:
http://testlaravel.test/api/employees/EMP1987
но он возвращает только:
[]
есть предложения? Спасибо.
Ответ №1:
Я думаю, что ваш код неверен.
Первый:
public function show(Request $request, Employee $employee)
Это означает, что у вас есть параметр Employee model . таким образом, вы можете получать данные из этой модели, не нужно искать другие:
public function show(Request $request, Employee $employee)
{
$employees = DB::table('employees')
->select('employees.empno','employees.firstname', 'employees.lastname','employee_backgrounds.email','employees.remarks')
->leftJoin('employee_backgrounds', 'employees.empno', '=', 'employee_backgrounds.empno')
->where('employees.empno', '=', $employee->empno)
->get();
return $employees;
}
Второй:
Employee::find()
действует на первичный ключ, если вы установили для своего первичного ключа в своей модели что-то другое, кроме id, выполнив
protected $primaryKey = 'empno';
тогда find будет выполнять поиск по этому ключу.
Так что ваш код может:
$empno = Employee::find($employee->empno);
или
$empno = Employee::find($employee->id);
В конце концов, ваш код может выглядеть так:
public function show(Request $request, Employee $employee)
{
$employees = DB::table('employees')
->select('employees.empno','employees.firstname', 'employees.lastname','employee_backgrounds.email','employees.remarks')
->leftJoin('employee_backgrounds', 'employees.empno', '=', 'employee_backgrounds.empno')
->where('employees.empno', '=', $employee->empno)
->get();
return $employees;
}
или
public function show(Request $request, int $empno)
{
$employees = DB::table('employees')
->select('employees.empno','employees.firstname', 'employees.lastname','employee_backgrounds.email','employees.remarks')
->leftJoin('employee_backgrounds', 'employees.empno', '=', 'employee_backgrounds.empno')
->where('employees.empno', '=', $empno)
->get();
return $employees;
}
или
public function show(Request $request, Employee $employee)
{
$empno = Employee::find($employee->empno);
$employees = DB::table('employees')
->select('employees.empno','employees.firstname', 'employees.lastname','employee_backgrounds.email','employees.remarks')
->leftJoin('employee_backgrounds', 'employees.empno', '=', 'employee_backgrounds.empno')
->where('employees.empno', '=', $empno->empno)
->get();
return $employees;
}
Если вы хотите протестировать данные, используйте Laravel Debugbar или dd(); команда [dd($empno);]