如何从laravel 7 API的两个表中选择特定的列?

问题描述

我是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);]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...