2

私は以下の機能を持っています -

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ます。例 - If$search_keyword = 'laravel'および$serach_user = 'zack'. 他のユーザーからも結果を取得しています。

私はlaravelが初めてです。では、クエリで何が間違っているのでしょうか?

4

2 に答える 2

3

クエリ

$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();

事前に確認してください。

于 2016-08-27T09:02:49.967 に答える