如何从 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 中的两个表中选择特定列?的主要内容,如果未能解决你的问题,请参考以下文章

根据Laravel Vue Js Api中的关系从多个表中删除数据

Laravel 5.7 - 如何使用 axios.get 从 API 检索数据?

如何从单个控制器将数据插入到 laravel 中的多个表中?

如何使用 Laravel 合并两个计数

如何从 ReactJS 组件调用 Laravel Api 路由?

Laravel 7:foreach 循环中未定义的变量