request 로 넘어온 검색 키워드를 처리하려면 query scope 을 쓰시는게 코드가 더 깔끔해 지지 않을까 생각됩니다.
(참고: https://www.lesstif.com/pages/viewpage.action?pageId=27295884)
쿼리스코프는 모델(Resource.php ?) 파일에 정의해 주시면 됩니다.
class Resource extends Model { /** * Scope a query to only include active users. * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeQueryWithParameter($query, \App\Http\Requests\Request $request) { if (!empty($request->get('title'))) $query = $query->where('resource.title', 'like', '%'. $request->get('title'). '%'); if (!empty($request->get('sub_title'))) $query = $query->where('resource.sub_title', 'like', '%'.$request->get('sub_title') .'%'); if (!empty($request->get('writer'))) $query = $query->where('resource.writer', 'like', '%'.$request->get('writer') .'%'); return $query; } }
사용은 아래처럼 하시면 되고요.
$data = Resource::QueryWithParameter($req)->paginate(20);
오!! 감사합니다!!
두분 모두 감사합니다. 결국 raw 쿼리로 해결했습니다.
비교 대상 텍스트 컬럼이 꽤 많네요. MySQL을 쓰신다면 풀텍스트 인덱스도 고려해 보세요.
https://github.com/appkr/l5code/blob/master/app/Http/Controllers/ArticlesController.php#L53
검색어를 폼값으로 받아와서 검색 결과를 출력하는 쿼리를 만들려고 하고 있습니다.
아래처럼 하니까 오류가 많이 발생하더라구요.
어떻게 쿼리를 구성해야 할까요?