Как я могу извлечь запись из HTTP-запроса в laravel?

#php #laravel #mongodb

#php #laravel #mongodb

Вопрос:

Моя функция listDepartment работает как извлечение всех моих записей из базы данных и отображение меня, я также добавил строку поиска, но после внедрения кода строки поиска он не отображал мне никаких записей.

вот мой файл контроллера

 public function listDepartment(Request $request)
    {
        $listOfDepartment = $request->input('search');
        $listOfDepartment=Department::where('nameOfDepartment', 'LIKE', "%{$request->input('search')}%")
            ->orwhere('createdBy', 'LIKE', "%{$request->input('search')}%")->orderBy('nameOfDepartment', 'ASC')->paginate(2);  

        $listOfDepartment->appends (array('search'=>Input::get('search')));

        return view('pages.department', compact('listOfDepartment'));
    }
 

Я хочу, чтобы, если я ничего не искал по умолчанию, он отображал мне все записи из моей коллекции отдела
, кто-нибудь поможет, пожалуйста???

и как я могу справиться, если у меня есть более одного такого поля

 public function listOfLeave(Request $request)
    {
        $search = [$request->input('name'), $request->input('status'),];

        $allLeaves = null;
        if (!empty($search))
        {
            $allLeaves=LeaveManagement::where('username', 'LIKE', "%{$request->input('name')}%")->orderBy('username', 'ASC')  
                                    ->orWhere('typeOfLeave', 'LIKE', "%{$request->input('leaveType')}%")->orderBy('typeOfLeave', 'ASC')
                                    ->orWhere('typeOfLeave', 'LIKE', "%{$request->input('leaveType')}%")->orderBy('typeOfLeave', 'ASC')
                                    ->orWhere('startDate', 'LIKE', "%{$request->input('appliedDate')}%")->orderBy('startDate', 'ASC')
                                    ->orWhere('status', 'LIKE', "%{$request->input('status')}%")->orderBy('status', 'ASC')->paginate(2);

            return view('pages.newleaverequest')->with(['allLeaves'=>$allLeaves]);  
        }
        else 
        {
            $allLeaves=LeaveManagement::orderBy('username', 'ASC')->paginate(5);  
        }

        $allLeaves->appends(array('name'=>Input::get('name')));

        return view('pages.newleaverequest', compact('allLeaves'));
    }
 

Ответ №1:

Попробуйте:

 public function listDepartment(Request $request)
{
    $search = $request->input('search');
    $listOfDepartment = null;
    if (!empty($search){
        $listOfDepartment=Department::where('nameOfDepartment', 'LIKE', "%{$request->input('search')}%")
        ->orwhere('createdBy', 'LIKE', "%{$request->input('search')}%")->orderBy('nameOfDepartment', 'ASC')->paginate(2);  
    }
    else {
        $listOfDepartment=Department::orderBy('nameOfDepartment', 'ASC')->paginate(2);  
    }


    $listOfDepartment->appends(array('search'=>Input::get('search')));

    return view('pages.department', compact('listOfDepartment'));
}
 

Пожалуйста, замените paginate часть инструкции фактическим кодом, для которого вы написали.

Для более чем одного поля:

 public function listOfLeave(Request $request)
{
        $allLeaves = null;
        if (
            !empty($request->input('name')) || 
            !empty($request->input('leaveType')) || 
            !empty($request->input('appliedDate')) || 
            !empty($request->input('status'))       
        )
        {
            $flg = false; 

            if (!empty($request->input('name'))){
                $flg = true; 
                $allLeaves=LeaveManagement::where('username', 'LIKE', "%{$request->input('name')}%");
            }

            if (!empty($request->input('leaveType'))){
                if($flg){
                    $allLeaves=$allLeaves->orWhere('typeOfLeave', 'LIKE', "%{$request->input('leaveType')}%");
                }
                else {
                    $allLeaves=LeaveManagement::where('typeOfLeave', 'LIKE', "%{$request->input('leaveType')}%");
                }
            }

            if (!empty($request->input('appliedDate'))){
                if($flg){
                    $allLeaves=$allLeaves->orWhere('appliedDate', 'LIKE', "%{$request->input('appliedDate')}%");
                }
                else {
                    $allLeaves=LeaveManagement::where('appliedDate', 'LIKE', "%{$request->input('appliedDate')}%");
                }
            }

            if (!empty($request->input('status'))){
                if($flg){
                    $allLeaves=$allLeaves->orWhere('status', 'LIKE', "%{$request->input('status')}%");
                }
                else {
                    $allLeaves=LeaveManagement::where('status', 'LIKE', "%{$request->input('status')}%");
                }
            }

            $allLeaves = $allLeaves->orderBy('username', 'ASC')
                                    ->orderBy('typeOfLeave', 'ASC')
                                    ->orderBy('appliedDate', 'ASC')
                                    ->orderBy('status', 'ASC')
                                    ->paginate(2);

            return view('pages.newleaverequest')->with(['allLeaves'=>$allLeaves]);  
        }
        else 
        {
            $allLeaves=LeaveManagement::orderBy('username', 'ASC')->paginate(5);  
        }

        $allLeaves->appends(array('name'=>Input::get('name')));

        return view('pages.newleaverequest', compact('allLeaves'));
}
 

Комментарии:

1. пожалуйста, помогите, как я могу справиться, если у меня более 1 поля?? я обновил вопрос…

2. @John_rees итак, вы хотите выполнить поиск либо по имени, либо по статусу? Можете ли вы объяснить точные критерии, по каким полям вы хотите выполнить поиск?

3. Я хочу выполнить поиск по имени или статусу или оставить тип или appliedDate У меня есть 4 поля для поиска

4. ОК. Таким образом, если какое-либо из 4 полей присутствует в запросе, то поиск должен быть применен для этого поля, иначе нет. Поправьте меня?

5. @John_rees пожалуйста, проверьте ответ, я добавил в него новую функцию.