2016-08-27 2 views
0

나는 아래의 기능했습니다 -Laravel 쿼리가 제대로

public function search_profile(Request $request) 
{ 
    $search_keyword = $request->search; 
    $search_user = $request->user; 
    $user_public = User::where('username', $request->user)->first(); 

    $tags_list = Tag::orderBy('tag', 'asc')->get(); 
    $bookmarks = Bookmark::orderBy('created_at','desc')->where('bookmarker', $search_user)->where('public', '1')->where('tags', 'rlike', $search_keyword)->orwhere('title', 'rlike', $search_keyword)->orwhere('description', 'rlike', $search_keyword)->orwhere('contents', 'rlike', $search_keyword)->paginate(15); 
    $bookmarks_all = Bookmark::orderBy('created_at','desc')->where('bookmarker', $search_user)->where('public', '1')->where('tags', 'rlike', $search_keyword)->orwhere('title', 'rlike', $search_keyword)->orwhere('description', 'rlike', $search_keyword)->orwhere('contents', 'rlike', $search_keyword)->get(); 
    return view('profile_search')->with('bookmark', $bookmarks)->with('tags_list', $tags_list)->with('bookmarks_all', $bookmarks_all)->with('username', $user_public)->with('search_keyword', $search_keyword); 
} 

을하지만 난 다른 bookmarker에서 결과를 얻고있다. 예 : $search_keyword = 'laravel'$serach_user = 'zack' 인 경우 나는 다른 사용자들로부터 결과를 얻고있다.

나는 laravel을 사용하고 있습니다. 그래서 내가 쿼리에서 잘못하고있는 것은 무엇입니까?

답변

1

귀하의 질의

$bookmarks = Bookmark::orderBy('created_at','desc')->where('bookmarker', $search_user)->where('public', '1')->where('tags', 'rlike', $search_keyword)->orwhere('title', 'rlike', $search_keyword)->orwhere('description', 'rlike', $search_keyword)->orwhere('contents', 'rlike', $search_keyword)->paginate(15); 

는 제목과 일치하는 경우, 그 결과를 반환하기 때문에 당신이 의도하지 않은이

SELECT * FROM bookmarks WHERE bookmarker = $search_user AND public = 1 OR title rlike $search_keyword OR content rlike $search_keyword; 

처럼 뭔가를 얻을 것입니다.

Bookmark::orderBy('created_at','desc') 
     ->where('bookmarker', '$search_user') 
     ->where('public', '1') 
     ->orWhere(function ($query) use ($search_keyword) { 
      $query->where('title', 'rlike', $search_keyword) 
        ->where('contents', 'rlike', $search_keyword); 
     }) 
     ->get(); 

체크 아웃 advance where :

은 당신이 가장 가능성이 원하는 것은 이것이다.

+0

'정의되지 않은 변수 : search_keyword' 오류가 발생했습니다. 변수에 액세스 할 수없는 이유는 무엇입니까? –

+0

oops 당신은 Use 키워드 -> https://secure.php.net/manual/en/language.namespaces.importing.php를 사용해야합니다. 대답은 – SteD

+0

입니다. 방금 여기에서 발견되었습니다 - http://stackoverflow.com/a/29548311/3866364 –

관련 문제