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

Posted

技术标签:

【中文标题】如何从 laravel 7 API 中的两个表中选择特定列?【英文标题】:How to select specific columns from two tables in laravel 7 API? 【发布时间】:2021-01-21 23:12:52 【问题描述】:

我是 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 模型。所以你可以从这个模型中获取数据,无需寻找其他的:

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

【讨论】:

以上是关于如何从 laravel 7 API 中的两个表中选择特定列?的主要内容,如果未能解决你的问题,请参考以下文章