박주니 개발 정리

라라벨 검색처리 설명 본문

라라벨

라라벨 검색처리 설명

박주니 2022. 3. 17. 17:43
728x90
반응형

우선 바로 응용이 아닌 간단하게 라라벨 검색처리에 대해서 이해하기 위해 새로운 페이지를 만들어서 정리를 해봤습니다.

 

1. selectData.blade.php를 생성하고 간단한 검색처리 폼을 만듭니다.

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div>
                    <h1>Select get Data</h1>
                    <form action={{ route('selectData.index') }} method="GET">
                        <select name="select">
                            <option value="0">title</option>
                            <option value="1">description</option>
                        </select>
                        <input type="text" name="search">
                        <button type="submit">버튼</button>
                    </form>
                    @isset($announcements)
                        @foreach ($announcements as $announcement)
                            {{ $announcement->title }}
                        @endforeach
                    @endisset
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
  • 간단한 설명 
    • select option에서 지정한 value와 input 값을 web.php에 selectData.index로 지정한 controller에서 조건에 맞는 데이터를 가지고 올 것입니다. 
    • @isset은 select를 했을 때 조건에 부합한 데이터를 보이게 할 것입니다.

2. selectData.blade.php를 보일 수 있게 루트를 설정합니다. 저는 우선 controller에서 SelectDataController를 만들어서 index class를 통해 보이게 했습니다.

Route::get('/selectData', [App\Http\Controllers\SelectDataController::class, 'index'])->name('selectData.index');

3. selectData.blade.php를 보면 버튼을 클릭시 selectData.index로 요청을 했기 때문에 web.php에서 보면 SelectDataController index class에 정보를 받고 compact해서 다시 보낼 수 있게 기본 폼을 만들어줍니다. 

    public function index(Request $request){
        $announcements = null;
        if(true == isset($request->select) && true == isset($request->search)){

        }
        else{

        }
        return view('selectData', compact('announcements'));
    }

 

  • 간단한 설명 
    • $request에는 프론트에서 보낸 select value, search value가 들어있을 것입니다. 
    • 우선 조건에 따라서 값을 전달할 것이기 때문에 초깃값을 $announcements = null로 합니다. 조건이 맞으면 그 값을 compact로 보낼 것입니다. 
    • if~else를 통해서 isset이 true라는 것은 null이 아닌 값이 들어있는 것을 보냈다는 의미이기 때문에 값이 들어잇을 때랑 들어있지 않을 때 어떻게 할 것인지 구분 지을 것입니다. 

4. SelectDataController index class에 select-search value가 일치한 값을 내보낼 수 있게 조건문을 완성시킵니다.

    public function index(Request $request){
        $announcements = null;
        if(true == isset($request->select) && true == isset($request->search)){
            switch($request->select){
                case '0':
                    $announcements = Announcement::where('title', $request->search)->paginate(10);
                    Log::info($announcements);
                case '1';
                    $announcements = Announcement::where('description', $request->search)->paginate(10);
                break;
            }
        }
        else{

        }
        return view('selectData', compact('announcements'));
    }
  • 간단한 설명 
    • switch 조건문을 사용해서 select의 값을 가져와서 option 지정된 값을 구분을 합니다. 저는 0일때는 title, 1일 때는 description이라고 지정했습니다. 
    • case가 0일 때는 DB상에서 title이라는 column을 찾고 value가 $request->search 즉 input에 적은 값과 일치했을 때 값을 내보냅니다. case가 1일경우에도 동일합니다. 조건이 다 끝났으면 breack로 멈춰줍니다.
    • 조건에 맞는 값을 compact를 통해서 내보내줍니다. 그럼 그 값을 프론트상에 가져오는 것을 볼 수 있습니다. 
    • DB에 따로 만들어서 title, description을 만들어주고 연결하고 그대로 적용하면 될 것입니다. 

5. 해당 url에 접속하셔서 값을 입력하고 버튼을 눌렀을 때 조건에 맞는 data가 append되는 지 확인하시길 바랍니다.

  • 주의사항▶ 해당 DB에 데이터를 다양하게 만들어주시길 바랍니다. 현재 제가 적은 조건문으로는 띄어쓰기를 하거나 몇글자만 적으면 해당 데이터를 가지고 오는 것은 안적었기 때문에 띄어쓰기없이 데이터를 추가해주시길 바랍니다. 
728x90
반응형
Comments