저도 초보이지만 감히 코드리뷰를 하면,
일단 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() !!}
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
<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페이지를 보여줄수있을까요