TP5多條件搜索,同時有必要條件


$model = $this->model;
        // 查詢是否有搜索參數
        $search = input('?get.search') ? trim(input('get.search')) : false;

        $list = $model;
        if($search) {
            // 查詢相關標簽
            $searchTags = model('tag')
                    ->alias('a')
                    ->join('tagmap b', 'b.tagid = a.id')
                    ->where('a.name', 'like', '%' . $search . '%')
                    ->column('b.tid');
            $tagsTeacherIdsArr = preg_grep('/\d+/' ,$searchTags);
            $tagsTeacherIds = join(',' ,array_unique($tagsTeacherIdsArr));
        // 閉包搜索 內容
$list = $list->where(function ($query) use ($search, $tagsTeacherIds) { $query->whereOr('id','in',$tagsTeacherIds) ->whereOr('name', 'like', '%' . $search . '%') ->whereOr('desc', 'like', '%' . $search . '%'); }); }
      // 必要條件
$list = $list->where([ 'ispublic' => 1, 'isdel' => 0 ]) ->order('sort','desc') ->paginate(15,false,[ 'query' => request()->param() ]);

前言:where里面的條件是 && 的關系,whereOr里面的條件是 | | 的關系,

 如果不用閉包,直接在外面whereOr的話會查詢數據庫所有的,條件就不起作用了

想要得到的效果:

    1.篩選出is_deleted字段為0(未刪除)的公告

    2.篩選出全部狀態為已發送(status=1)的公告

    3.狀態為草稿的公告僅自己可見

代碼(紅色框起來的部分):

等價於select * from table(表名) WHERE ( `admin_id` = 當前用戶的id   OR `status` = '1' ) and `is_deleted` = '0 ;      

 

注: 1.$params = ['is_deleted'=>0]     where()可以寫多個條件,逗號分隔,如where(['name'=>'坤坤','is_deleted'=>0])

  2.order是排序方式

  3.field是要查找的字段

 

引用: https://www.cnblogs.com/youantianqin/p/11087098.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM