【问题标题】:Laravel query with having 'where' and 'orwhere' not working properlyLaravel 查询具有 'where' 和 'orwhere' 无法正常工作
【发布时间】:2017-01-03 21:22:53
【问题描述】:

我有以下功能 -

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

【问题讨论】:

    标签: php laravel-5.2 laravel-query-builder


    【解决方案1】:

    嘿,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('contents', 'rlike', $search_keyword)->paginate(15);

    【讨论】:

      【解决方案2】:

      您的查询

      $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

      【讨论】:

      猜你喜欢
      • 2015-01-19
      • 2021-02-11
      • 2020-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 2016-06-30
      • 1970-01-01
      相关资源
      最近更新 更多