질문을 삭제하지 말아주세요.!
 
1
0
-1

<form action="{{route('room.search')}}" style="margin-top:0.8rem;" method="get">
<select name="type" style="height:2.1rem;">
<option value="name">이름</option>
<option value="phone">전화번호</option>
</select>
<input type="text" class="i-t" name="search" placeholder="방호수 및 입주자이름 , 전화번호를 입력하세요">
<button>검색</button>
</form>

이런식으로 뷰가 작성되있고


검색어를 입력하고 엔터를 누르면

http://localhost/bandb/public/search?type=name&search=검색어


이렇게 url 이동되면서 controller에서는

public function roomsearch(Request $request)
{
$type = $request->get('type');
$search = $request->input('search');
$value = \App\Occupant::where($type,'like','%'.$search.'%')->paginate(3);
return view('pages.searchs.roomsearch')->with('value',$value);
}

이런식으로 작성되어있는데 처음에는 잘 작동되는데 

페이지네이션 두번째이지를 클릭하면


http://localhost/bandb/public/search?page=2 이런식으로 바뀌어 type 이랑 search 파라미터가 없어져서

SQLSTATE[42S22]: Column not found: 1054 Unknown column '' in 'where clause' 오류를 내요

{{$페이지→links()}} 로 작성되어있습니다 어떻게 파라미터를 변동없이 2페이지를 보여줄수있을까요



    CommentAdd your comment...

    2 answers

    1.  
      1
      0
      -1

      저도 초보이지만 감히 코드리뷰를 하면,

      일단 type 과 search 의 컨트롤러 쪽을 보시면,

      type는 'get' search 는 'input'으로 하셨는데 이렇게 따로 한 이유가 있으신지 궁금하네요..

      이왕이면 유지보수를 위해서 특별한게 아니라면 하나로 통일해주시면 좋을 것같네요..


      그리고 이왕이면 기본값을 넣어주는게 좋습니다.

      기본값을 넣는게 싫으시다면 if를 태워야해요..

      기본값을 넣는 방법

      $request→input('search', '기본값'); 
      $request→input('type', '기본값');


      하시면 되시고,


      if를 태우실 경우에는

      if($type && $search){
        // type과 search가 있을 경우에만 where문을 태움.
      }


      마지막으로 페이지를 그리는 부분인데요..

      추측컨데 페이지를 그리실때

      {!! $value->links() !!} 로 하셨을 것 같은데

      appends를 추가하여서 얻은 param을 넣어주셔야되요.

      개발자마다 틀리지만 저는 빈 param이 있는 것을 싫어하기 때문에

      array_filter를 추가해서 씁니다.


      {!! $value→appends(array_filter(Request::only('search', 'type')))->links() !!}
        CommentAdd your comment...
      1.  
        1
        0
        -1

        http://larabrain.com/tips/passing-get-parameters-when-using-laravel-pagination

        구글링으로 찾은 내용입니다

        $users = $query->paginate();

        출력

        {!! $users->appends(\Input::except('page'))->render() !!}

        결과

        /users?keyword=wjgilmore&page=2


        라라벨 한국어 메뉴얼중 아래 링크로 가셔서 "페이지 링크에 추가하기"를 참고하시면 됩니다

        https://laravel.kr/docs/5.6/pagination#displaying-pagination-results


          CommentAdd your comment...