Оформление заказа внутри с (), в Laravel - PullRequest
0 голосов
/ 05 июня 2018

У меня есть контроллер, который фильтрует столбцы в своей таблице на основе переменной, полученной в запросе get, затем возвращает его со значением другой таблицы на основе идентификатора полученной переменной, но теперь для условия $filter_by_name Iхотите отфильтровать по столбцу first_name в таблице пользователей, пожалуйста, как мне это сделать, т.е. я хочу вернуть таблицу пользователей, упорядоченную по столбцу first_name

DB-STRUCTURE

COMPANY-SUSERS 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

Контроллер компании-пользователя

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 ]

0 голосов
/ 05 июня 2018

Вы можете передавать более близкие функции, когда стремитесь к загрузке, чтобы добавить подобные ограничения, см. Больше в документах laravel :

$users = CompanyUser::with(['user'=> function ($query) {
                                   $query->orderBy('first_name', 'desc');
                                 }
                           ])
                      ->where('company_id', $companyId)
                      ->get();
0 голосов
/ 05 июня 2018

Одним из способов является добавление столбца 'first_name' в ТАБЛИЦУ 'КОМПАНИИ-ПОЛЬЗОВАТЕЛЕЙ

И теперь вы можете сделать заказ по (' first_name ',' ASC ').Я думаю, что это не лучший способ, но никакая другая идея не приходит мне в голову.

0 голосов
/ 05 июня 2018

Вы должны сделать заказ по реляционной модели, как показано ниже:

 $users = CompanyUser::where('company_id', $companyId)
->with(['user' => function($subQuery){
     $subQuery->orderBy('first_name', 'ASC');
}])
->with(['user.userDepartments','user.userDepartments.department'])
->get();

return $users;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...