ThinkPHP 的查詢構建器提供流暢介面,支援多種查詢語法。本文系統整理五大類查詢方式,附代碼片段與適用場景,適合桌邊速查。
// 字符串(不推薦,需手動加引號)
$m->where('id=1 and name="roge"')->find();
// 陣列(推薦,自動處理類型與轉義)
$data['name'] = 'adfa';
$data['id'] = 3;
$data['_logic'] = 'or'; // 預設 and
$m->where($data)->find();
| 關鍵字 | SQL 等價 | 示例 |
|---|---|---|
| EQ | = | ['id'=>['eq',5]] |
| NEQ | != | ['id'=>['neq',5]] |
| GT | > | ['id'=>['gt',10]] |
| EGT | >= | ['id'=>['egt',10]] |
| LT | < | ['id'=>['lt',20]] |
| ELT | <= | ['id'=>['elt',20]] |
| LIKE | LIKE | ['name'=>['like','%think%']] |
| NOTLIKE | NOT LIKE | ['name'=>['notlike','%test%']] |
| IN | IN (...) | ['id'=>['in','1,2,3']] |
| NOTIN | NOT IN (...) | ['id'=>['notin','1,2,3']] |
| BETWEEN | BETWEEN ... AND ... | ['id'=>['between','5,10']] |
| NOTBETWEEN | NOT BETWEEN ... AND ... | ['id'=>['notbetween','5,10']] |
| EXP | 原生表達式 | ['id'=>['exp','IN(1,2,3)']] |
多值邏輯:['name'=>['like',['%a%','%b%'],'or']](預設 or,可指定 and)
$data['id'] = [
['gt', 5],
['lt', 10]
]; // 默認 AND:5 < id < 10
// 顯式 OR
$data['id'] = [
['lt', 5],
['gt', 10],
'or'
];
// 字符串字段多 LIKE
$data['name'] = [
['like', '%d%'],
['like', '%e%'],
'nick', // 字段別名(可選)
'or'
];
$m->where($data)->select();
$m->count('id'); // COUNT(id)
$m->max('score'); // MAX(score)
$m->min('score');
$m->avg('price');
$m->sum('amount');
可鏈式:$m->where('status=1')->count()
$m = M(); // 空模型實例
// 讀操作
$list = $m->query("SELECT * FROM think_user WHERE id > 1");
// 寫操作
$m->execute("INSERT INTO think_user(name) VALUES ('dfd')");
query():返回結果集陣列execute():返回影響行數/插入 ID$m->field('password,secret', true)->select()(true 表示排除)$m->lock(true)->find()(FOR UPDATE)$m->page(2,15)->select() 或 $m->limit(15)->page(2)->select()echo $m->getLastSql() 查看實際執行語句熟練掌握 ThinkPHP 查詢構建器,能將 90% 以上的 SQL 寫為鏈式調用,兼顧可讀性與安全性(自動參數綁定)。