簡體   English   中英

Laravel 查詢“where”和“orwhere”無法正常工作

[英]Laravel query with having 'where' and 'orwhere' not working properly

我有以下功能 -

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 的新手。 那么我在查詢中做錯了什么?

您的查詢

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

檢查提前在哪里

嘿,Xahed Kamal,請將此查詢與像這樣的表一起使用($data = DB::table('table_name')->where('column_name',abcd)->orWhere('column_name',abcd)->get(); )

它的工作正常

和下一個 $bookmarks = Bookmark::orderBy('created_at','desc')->where('bookmarker', $search_user)->where('public', '1')->where('tags', 'rlike', $search_keyword)->pluck('id');

$bookmarks_data = Bookmark::whereIn('id',$bookmarks)->orwhere('title', 'rlike', $search_keyword)->orwhere('description', 'rlike', $search_keyword)->orwhere('內容', 'rlike', $search_keyword)->分頁(15);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM