它有一种优化此代码的方法。我已经谷歌了,但我不知道搜索的确切关键字是什么,所以我总是找不到答案。
在此代码中,我获得了ID 512的审批者列表(请求者)
$approver_list = DB::table('users')
->leftjoin('approver_group_list', 'approver_group_list.user_id', '=', 'users.id')
->leftjoin('approval_roles', 'approval_roles.as_id', '=', 'approver_group_list.as_id')
->leftjoin('approver_requestor_list', 'approver_requestor_list.at_id', '=', 'approval_roles.at_id')
->where('approver_requestor_list.user_id', 512)
->get();
然后我使用array_push提取approver_list的数据,然后使用$ result的值来获取LeaveMain表中的值。
$result = array();
foreach($approver_list as $al)
{
array_push($result , $al->user_id);
}
$leave_list = LeaveMain::whereIn('requestor_id', $result)->get();
我的问题是,总是需要使用array_push来提取数据,或者laravel有办法优化这段代码。
答案 0 :(得分:1)
$approver_list = DB::table('users')
->leftjoin('approver_group_list', 'approver_group_list.user_id', '=', 'users.id')
->leftjoin('approval_roles', 'approval_roles.as_id', '=', 'approver_group_list.as_id')
->leftjoin('approver_requestor_list', 'approver_requestor_list.at_id', '=', 'approval_roles.at_id')
->where('approver_requestor_list.user_id', 512)
->pluck('id');
$leave_list = LeaveMain::whereIn('requestor_id', $approver_list)->get();
基本上你可以从表本身中提取id,而不是获取所有数据然后再获取id,而whereIn接受collection作为第二个参数。所以不需要转换为数组
whereIn方法按给定的键/值过滤集合 包含在给定数组中:Link
答案 1 :(得分:0)
您不需要循环approver_list值,您可以使用pluck
方法检索user_id的所有值。
$result = $approver_list->pluck('user_id')->toArray();
$leave_list = LeaveMain::whereIn('requestor_id', $result)->get();