where('type=1 AND status=1'),傳統但不安全,需配合預處理。where(array('name'=>'thinkphp','status'=>1)),自動轉義、預處理。where((object)array('name'=>'thinkphp')),效果同陣列。格式:$map['字段'] = array('表達式','條件');
| 表達式 | 含義 | 示例 |
|---|---|---|
| EQ | = | array('eq',100) ≡ 100 |
| NEQ | <> | array('neq',100) |
| GT/EGT | > / >= | array('gt',100) / array('egt',100) |
| LT/ELT | < / <= | array('lt',100) / array('elt',100) |
| LIKE | 模糊 | array('like','thinkphp%');配合 DB_LIKE_FIELDS 自動模糊 |
| [NOT] BETWEEN | 區間 | array('between','1,8') 或 array('between',array(1,8)) |
| [NOT] IN | 集合 | array('in','1,5,8') 或 array('in',array(1,5,8)) |
| EXP | 原生 SQL 片段 | array('exp','IN (1,3,8)');也可用於更新 array('exp','score+1') |
$map['name|title']='thinkphp' → name='thinkphp' OR title='thinkphp'$map['status&title']=array(1,'thinkphp','_multi'=>true) → status=1 AND title='thinkphp'_multi=>true 必須置陣列末尾。| 與 & 不可混用。$map['id'] = array(array('gt',1), array('lt',10)); // (id>1) AND (id<10)
$map['id'] = array(array('gt',3), array('lt',10), 'or'); // (id>3) OR (id<10)
$map['name'] = array(array('like','%a%'), array('like','%b%'), array('like','%c%'), 'ThinkPHP', 'or');
最後一參數為邏輯運算符(AND/OR/XOR),預設 AND。
_string:混合字串條件 $map['_string']='status=1 AND score>10'_query:URL 參數風格 $map['_query']='status=1&score=100&_logic=or'_complex:封裝子查詢條件 $map['_complex']=$where,支援嵌套邏輯。| 方法 | 說明 |
|---|---|
| count('字段') | 統計數量,字段可選 |
| max('字段') | 最大值,字段必填 |
| min('字段') | 最小值,字段必填 |
| avg('字段') | 平均值,字段必填 |
| sum('字段') | 總和,字段必填 |
均支援鏈式操作:$User->where('score>0')->max('score')。
query($sql,$parse=false):讀操作(走讀庫),返回結果集。execute($sql,$parse=false):寫操作(走寫庫),返回影響行數。getBy字段名(值):$User->getByName('liu21st')getFieldBy字段名(值,目標字段):$User->getFieldByName('liu21st','id')// 方式 1:select(false)
$subQuery = $model->field('id,name')->table('tablename')->group('field')->where($where)->order('status')->select(false);
// 方式 2:buildSql()(推薦,自動加括號)
$subQuery = $model->field('id,name')->table('tablename')->group('field')->where($where)->order('status')->buildSql();
// 使用
$model->table($subQuery.' a')->where(...)->order(...)->select();