一、介紹
ThinkPHP內置了非常靈活的查詢方法,可以快速的進行數據查詢操作,查詢條件可以用于讀取、更新和刪除等操作,主要涉及到where方法等連貫操作即可,無論是采用什么數據庫,你幾乎采用一樣的查詢方法(個別數據庫例如Mongo在表達式查詢方面會有所差異),系統幫你解決了不同數據庫的差異性,因此我們把框架的這一查詢方式稱之為查詢語言。查詢語言也是ThinkPHP框架的ORM亮點,讓查詢操作更加簡單易懂。下面來一一講解查詢語言的內涵。
二、查詢方式
ThinkPHP可以支持直接使用字符串作為查詢條件,但是大多數情況推薦使用索引數組或者對象來作為查詢條件,因為會更加安全。
1.使用字符串作為查詢條件
這是最傳統的方式,但是安全性不高,例如:
<?php $User = M("User"); // 實例化User對象 $User->where('type=1 AND status=1')->select(); ?>
最后生成的SQL語句是
SELECT * FROM think_user WHERE type=1 AND status=1
采用字符串查詢的時候,我們可以配合使用新版提供的字符串條件的安全預處理機制,暫且不再細說。
2.使用數組作為查詢條件
這種方式是最常用的查詢方式,例如:
<?php $User = M("User"); // 實例化User對象 $condition['name'] = 'thinkphp'; $condition['status'] = 1; // 把查詢條件傳入查詢方法 $User->where($condition)->select(); ?>
最后生成的SQL語句是
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
如果進行多字段查詢,那么字段之間的默認邏輯關系是 邏輯與 AND,但是用下面的規則可以更改默認的邏輯判斷,通過使用 _logic 定義查詢邏輯:
<?php $User = M("User"); // 實例化User對象 $condition['name'] = 'thinkphp'; $condition['account'] = 'thinkphp'; $condition['_logic'] = 'OR'; // 把查詢條件傳入查詢方法 $User->where($condition)->select(); ?>
最后生成的SQL語句是
SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp'
3.使用對象方式來查詢
這里以stdClass內置對象為例:
<?php $User = M("User"); // 實例化User對象 // 定義查詢條件 $condition = new stdClass(); $condition->name = 'thinkphp'; $condition->status= 1; $User->where($condition)->select(); ?>
最后生成的SQL語句和上面一樣
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
使用對象方式查詢和使用數組查詢的效果是相同的,并且是可以互換的,大多數情況下,我們建議采用數組方式更加高效。
三、表達式查詢
上面的查詢條件僅僅是一個簡單的相等判斷,可以使用查詢表達式支持更多的SQL查詢語法,也是ThinkPHP查詢語言的精髓,
查詢表達式的使用格式:$map['字段名'] = array('表達式','查詢條件');
表達式不分大小寫,支持的查詢表達式有下面幾種,分別表示的含義是:
EQ 等于(=)
NEQ 不等于(<>)
GT 大于(>)
EGT 大于等于(>=)
LT 小于(<)
ELT 小于等于(<=)
LIKE 模糊查詢
[NOT] BETWEEN (不在)區間查詢
[NOT] IN (不在)IN 查詢
EXP 表達式查詢,支持SQL語法
示例如下:
1.EQ :等于(=)
例如:$map['id'] = array('eq',100);和下面的查詢等效 $map['id'] = 100;表示的查詢條件就是 id = 100
2.NEQ: 不等于(<>)
例如:$map['id'] = array('neq',100);表示的查詢條件就是 id <> 100
3.GT:大于(>)
例如:$map['id'] = array('gt',100);表示的查詢條件就是 id > 100
4.EGT:大于等于(>=)
例如:$map['id'] = array('egt',100);表示的查詢條件就是 id >= 100
5.LT:小于(<)
例如:$map['id'] = array('lt',100);表示的查詢條件就是 id < 100
6.ELT: 小于等于(<=)
例如:$map['id'] = array('elt',100);表示的查詢條件就是 id <= 100
7.[NOT] LIKE: 同sql的LIKE
例如:$map['name'] = array('like','thinkphp%');查詢條件就變成 name like 'thinkphp%'