问题描述
我是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
但它仅返回:
[]
有什么建议吗?谢谢。
解决方法
我认为您的代码是错误的。
第一个:
public function show(Request $request,Employee $employee)
这意味着您有一个参数是Employee模型。因此您可以从该模型中获取数据,而无需查找其他数据:
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';
然后查找将改为通过该键进行搜索。
所以您的代码可能是:
$empno = Employee::find($employee->empno);
或
$empno = Employee::find($employee->id);
最后,您的代码可能像这样:
public function show(Request $request,$employee->empno)
->get();
return $employees;
}
或
public function show(Request $request,int $empno)
{
$employees = DB::table('employees')
->select('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',$empno->empno)
->get();
return $employees;
}
如果要测试数据,请使用Laravel Debugbar或dd();。命令[dd($ empno);]