如何在不使用array_push的情况下获取laravel 5.4中的数据

问题描述 投票:2回答:2

它有一种优化此代码的方法。我已经谷歌了,但我不知道搜索的确切关键字是什么,所以我总是找不到答案。

在此代码中,我获得了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有办法优化这段代码。

php laravel laravel-5.4
2个回答
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


0
投票

您不需要循环approver_list值,您可以使用pluck方法检索user_id的所有值。

$result = $approver_list->pluck('user_id')->toArray();
$leave_list = LeaveMain::whereIn('requestor_id', $result)->get();
© www.soinside.com 2019 - 2024. All rights reserved.