如何从 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 中的多个表中?