doushuo1080 2018-06-05 09:59
浏览 16
已采纳

在Laravel中用()内部命令

I have a controller that filters the columns in it's table based on the variable received in the get query, then it returns it with another table's value based on the id of the variable gotten, But now for the $filter_by_name condition I want to filter by the first_name column in the users table, please how can i do that, i.e I want to return the users table ordered by their first_name column

DB-STRUCTURE

COMPANY-USERS TABLE

id  company_id  user_id role created modified active department_level

USERS TABLE

id 
first_name 
last_name 
email 
password 
active_company 
profile_photo_id 
verified 
active 
remember_token 
created 
modified

Company-users Controller

public function getCompanyUsers($companyId)
{
    $filter = strtolower(Input::get('filter'));
    if($filter && $filter === 'on' ){
        $filter_by_date = strtolower(Input::get('filter_by_date'));
        $filter_by_name = strtolower(Input::get('filter_by_name'));
        $filter_by_role = strtolower(Input::get('filter_by_role'));
        if($filter_by_date){
            if($filter_by_date == 'oldest'){
                $users = CompanyUser::where('company_id', $companyId)->orderBy('created', 'DESC')
                ->with(['user','user.userDepartments','user.userDepartments.department'])->get();
                return $users;
            }else{
                $users = CompanyUser::where('company_id', $companyId)->orderBy('created', 'ASC')
                    ->with(['user','user.userDepartments','user.userDepartments.department'])->get();
                return $users;
            }
        }elseif ($filter_by_name){
            if($filter_by_name == 'ascending'){
                $users = CompanyUser::where('company_id', $companyId)->orderBy('first_name', 'ASC')
                    ->with(['user','user.userDepartments','user.userDepartments.department'])->get();
                return $users;
            }else{
                $users = CompanyUser::where('company_id', $companyId)->orderBy('first_name', 'DESC')
                    ->with(['user','user.userDepartments','user.userDepartments.department'])->get();
                return $users;
            }
        }elseif($filter_by_role){
            if($filter_by_role == 'member'){

                $users = CompanyUser::where(['company_id' => $companyId,'role'=>'Member'])->with(['user','user.userDepartments','user.userDepartments.department'])->get();
              //  dd($users);
                return $users;
            }elseif($filter_by_role == 'manager'){
                $users = CompanyUser::where(['company_id' => $companyId,'role'=>'Manager'])->with(['user','user.userDepartments','user.userDepartments.department'])->get();
                return $users;
            }else
                $users = CompanyUser::where(['company_id' => $companyId,'role'=>'Admin'])->with(['user','user.userDepartments','user.userDepartments.department'])->get();
            return $users;
        }
    }
    $users = CompanyUser::where('company_id', $companyId)->
    with(['user','user.userDepartments','user.userDepartments.department'])->get();
    //dd($users);
    return $users;
}
  • 写回答

3条回答 默认 最新

  • duanpanbo9476 2018-06-05 10:17
    关注

    you can pass closer functions when eager loading to add constrains like that, see more on laravel docs:

    $users = CompanyUser::with(['user'=> function ($query) {
                                       $query->orderBy('first_name', 'desc');
                                     }
                               ])
                          ->where('company_id', $companyId)
                          ->get();
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?