本案例實現了,單字段多搜索詞模糊匹配查詢和多字段同個搜索詞模糊匹配查詢,或的關系
在thinkPHP模型查詢中,一般有兩種方式:數組方式和閉包方式,相對於數組方式只能定義查詢條件,閉包方式可以支持更多的連貫操作,包括排序,數量限制等。
在thinkPHP閉包查詢中通常使用use進行參數傳遞
普通閉包查詢:
$items=ItemModel::all(function($query){$query->order('sort','asc');});
帶參數的閉包查詢:
$items=ItemModel::all(function($query)use($type){
$query->where('type',$type)->order('sort','asc');
})
tp5中的where與whereor同時使用一:
$data = db('table')->where(function($query) {
$query->where('key1', value)->whereor('key1',value1);
})->where(['key2'=>value2,'key3'=>value3])->field('key4')->find();
生成的sql語句為:
find key4 FROM `table` WHERE ( `key1` = 'value' OR `key1` = 'value1' ) and `key2` = 'value2'
and 'key3' = 'value3';
二:
$data = db('table')->where(function($query) {
$query->where('key1', value)->whereor('key1',value1);
})->whereor(function($query){
$query->where(['key2'=>value2]->whereor(['key3'=>value3]))
})->field('key4')->find();
find 'key4' FROM `table` WHERE ( `key1` = value OR `key1` = value1 )
OR ( `key2` = 'value2' OR `key3` = 'value3' )
實際場景
tp5 使用數組查詢時,一個字段有多個搜索詞時的寫法
場景一 一個字段多個搜索錯
$option['question']=[
['like','%'.'樂刷'.'%'],
['like','%'.'666'.'%'],
'or'
]; //測試可行,
分詞查詢(多條件模糊查詢)在訊寶實現了
場景二-----多個字段同時匹配查詢或語法
whereor閉包查詢,雲筆記項目搜索接口有案例
$list1=Db::name('user_biji')->page($page,10)->where(
function ($query)use($keyword){
$query->whereor('title','like',"%$keyword%")
->whereor('memo','like',"%$keyword%");
})->where('user_id',$this->auth->id)->field('id,title,memo,createtime,type,images')->select(); //測試可行
//要使用多個whereor查詢的話必須使用閉包查詢的方式,否則會導致where條件失效