Как выбрать определенные столбцы из двух таблиц в laravel 7 API?

#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);]