tp5 傳參閉包查詢+tp5中的where與whereor怎么同時使用


本案例實現了,單字段多搜索詞模糊匹配查詢和多字段同個搜索詞模糊匹配查詢,或的關系 

 

在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條件失效

 


免責聲明!

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



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