系統模型提供了一系列快捷操做的方法,能夠大幅提升開發效率。目前已提供的方法主要有select、find、limit、table、order、where、field、on、join、count、page、attr、showpage、insert、insertAll、delete、update、group、having、distinct、clear、query、execute、sum、avg、max、min、setInc、setDec、和動態方法getby_、getfby_。
1.
Select 方法:取得查詢信息,返回結果爲數組,若是未找到數據返回null,select通常在where,order,tabale等方法的後面,做爲最後一個方法來使用。如:
$model = Model('member');
// 查詢會員表所有信息
$model->select();
//取得性別爲1的會員列表信息, 注意:select方法須要在連貫操做中的最後一步出現
$model->where(array('member_sex'=>1))->select();
Select 方法能夠傳入主鍵ID,系統會自動查找對應信息,如:
// 查詢主鍵ID爲5的會員信息
$model = Model('member');
$model->select(5);
2.
Find 方法:取得一條記錄信息,find同select同樣,通常做爲最後一個方法來使用,如:
$model = Model('member');
// 查詢ID爲5的會員信息
$model->where(array('member_id'=>5))->find();
Find方法能夠傳入主鍵ID,系統會自動查找對應信息,如:
$model = Model('member');
// 查詢主鍵ID爲5的會員信息
$model->find(5);
3.
Limit 方法:指定返回多少條記錄數,
$model = Model('member');
$model->limit(4)->select(); // 等同於SELECT * FROM member LIMIT 4;
$model->limit('4,10')->select(); // 等同於SELECT * FROM member LIMIT 4,10;
4.
Table方法:指定要操做的數據表名稱,返回模型實例自己,如:
$model = Model();
// 查詢主鍵ID爲5的會員信息
$model->table('member')->find(5);
多表聯合查詢時,能夠傳入多個表名稱,如:
// 內連接查詢member和store表,並返回前兩條記錄
$on = 'store.member_id=member.member_id';
$model->table('member,store')->join('inner')->on($on)->limit(2)->select();
若是實例化時指定了表名,則能夠不使用table方法指定表名,如:
$model = Model('member');
$model ->limit(4)->select(); // 查詢前條4會員記錄
5.
Order 方法:指定排序的參數,返回模型實例自己,如:
$model->table('member')->order('member_id desc')->limit(4)->select();
也可指定多個字段進行排序,如:
$model->table('member')->order('member_id desc,member_sex asc')->select();
6.
Where 方法:指定sql執行的條件,返回模型實例自己,入可傳入數組或字段串,如:
//傳入數組條件
$model->where(array('member_id'=>5))->find();
//傳入字符串條件
$model->where(array('member_id=5'))->find();
//傳入多表關聯條件
$model->table('member,store');
$model->where('store.store_id=member.store_id and store.store_id=2')->find();
7.
Field 方法:指定要查詢的字段,不使用field方法時,默認查詢全部字段,如:
$model->field('member_id,member_name')->select();
8.
On 方法:指定多表聯查時的字段關係。
9.
Join 方法:指定多表聯查時的連接類型, 支持內連接、左連接(默認)、右連接。On與join方法須要一塊兒使用,如:
$model = Model();
//內連接查詢member和store表,返回會員ID爲6的記錄信息
$field = 'member.member_name,store.store_name';
$on = 'store.member_id=member.member_id';
$model->table('member,store')->field($field);
$model->join('inner')->on($on)->where(array('member.member_id'=>6))->find();
三表關聯查詢以下:
$model = Model();
//內連接查詢member和store,而後左連接store_class,查詢會員ID爲6的記錄信息
$field = 'member.member_name,store.store_name,store_class.sc_name';
$on = 'store.member_id=member.member_id,store.sc_id=store_class.sc_id';
$model->table('member,store,store_class')->field($field);
$model->join('inner,left')->on($on)->where('member.member_id=6')->find();
10.
Count 方法:返回記錄總數量,如:
$model = Model('member');
//返回會員表總行數
$model->count();
//返回會員ID大於15的記錄數
$model->where('member_id>15')->count();
11.
Page 方法:實現記錄分頁,格式爲page(每頁顯示數,總記錄數),總記錄數能夠人爲指定,也能夠爲空讓系統自動去計算,如:
//每頁顯示10條數據
$model = Model('member');
//系統會跟據每頁顯示數和已知屬性自動計算總記錄數
$model->page(10)->order('member_id desc')->select();
//每頁顯示10條數據,指定總記錄爲1000條,系統將再也不計算總記錄數
$model->page(10, 1000)->order('member_id desc')->select();
注意:若是同時使用where和page方法時,where方法要在page方法前面使用,如:
$model->where('id=1')->page(10)->select(); //正確
$model->page(10)->where('id=1')->select(); //錯誤
12.
Showpage 方法:返回分頁超連接,結合page方法完成分頁,如:
//顯示上一頁下一下連接
$model->showpage(1); //樣式1
$model->showpage(2); //樣式2(默認)
13.
Insert 方法:插入單行數據,並返回最新插入的主鍵ID,若是插入失敗返回false,完整格式以下:
insert($data='', $replace=false, $options=array())
//向link表插入數據,並返回最新主鍵ID
$model = Model('table');
$data = array(
'link_title'=>'ShopNC',
'link_url'=>'http://www.shopnc.net',
'link_sort'=>32,
);
$model->insert($data);
Insert方法支持延遲插入,加入$options參數便可,如:
$model->insert($data,false,array('priority'=>'DELAYED'));
Insert方法一樣支持replace操做,將第二個參數設置爲true便可,如:
$model = Model();
$data = array(
'link_title'=>'ShopNC',
'link_url'=>'http://www.shopnc.net',
'link_sort'=>32,
'link_id'=>30
);
$model->table('link')->insert($data,true);
14.
InsertAll 方法:實現批量插入數據,如:
$model = Model('link');
$data = array(
array(
'link_title'=>'新浪',
'link_url'=>'http://www.sina.com',
'link_sort'=>32,
),
array(
'link_title'=>'百度',
'link_url'=>'http://www.baidu.com',
'link_sort'=>30,
)
);
$model->insertAll($data);
15.
Delete 方法:刪除記錄,如:
$model = Model('link');
//刪除主鍵爲5的記錄
$model->delete(5);
//或者
$model->where(array('link_id'=>5))->delete();
16.
Update 方法:數據更新,若是更新內容含有主鍵下標,自動以該主鍵爲更新條件,如:
$model = Model();
//更新主鍵(link_id)爲37的記錄信息
$data = array(
'link_title'=>'ShopNC',
'link_url'=>'http://www.shponc.net',
'link_sort'=>32,
'link_id'=>37
);
$model->table('link')->update($data);
//指定更新條件
$data = array(
'link_title'=>'ShopNC',
'link_url'=>'http://www.shponc.net',
'link_sort'=>32
);
$model->table('link')->where(array('link_id'=>37))->update($data);
17.
Group 方法:實現分組功能,如:
//查詢每一個店鋪發佈商品的數量
$model = Model('goods');
$model->field('store_id,count(*) as count')->group('store_id')->select();
18.
Having 方法:結合group方法,進行條件過濾,傳入參數爲字符串形式,如:
//查找發佈商品超過500的店鋪ID
$model = Model('goods');
$model->field('store_id,count(*) as nc_count')->group('store_id')->having('nc_count>500')->select();
19.
Distinct 方法:能夠去除列中相同的值,distinct只接受一個參數值true,若是不須要重複值篩選,不使用該方法便可。
//查找擁有商品的店鋪主鍵
$model = Model();
$model->table('goods')->field('store_id')->distinct(true)->select();
20.
Clear 方法:清空單個表中的內容,返回true/false,如:
//清空link表
$model = Model();
$model->table('link')->clear();
21.
Query/execute 方法,兩個方法均用於直接執行SQL語句,query方法用於查詢,execute方法用於更新、寫入和刪除操做,如:
Model()->query('SELECT * FROM `shopnc_member` LIMIT 10');
Model()->execute('UPDATE `shopnc_goods` SET goods_click=1000 WHERE goods_id=2');
22.
Sum/Avg/Max/Min 方法:求和、求平均值、取最大值、取最小值,如:
$model = Model();
//返回全部商品總價格之和
$model->table('goods')->sum('price');
//上面等同於SQL:SELECT SUM(price) AS nc_sum FROM `goods`
//取商品表中全部商品的平均價格
$model->table('goods')->avg('price');
//以上等同於SQL:SELECT AVG(price) AS nc_avg FROM `goods` LIMIT 1
//取商品的最高價
$model->table('goods')->max('price');
//以上等同於SQL:SELECT MAX(price) AS nc_max FROM `goods` LIMIT 1
//取商品的最低價
$model->table('goods')->min('price');
//以上等同於SQL:SELECT MIN(price) AS nc_min FROM `goods` LIMIT 1
23.
自增/自減:系統使用setInc和setDec完成自增和自減,示例以下:
$model = Model();
//使主鍵值爲2的商品點擊量加1000
$model->table('goods')->where(array('goods_id'=>2))->setInc('goods_click',1000);
//等同於:UPDATE `goods` SET goods_click=goods_click+3 WHERE ( goods_id = '2' )
//結合exp參數,使用該商品點擊量減1000
$model = Model('goods');
$data = array(
'goods_id' => 2,
'goods_click' =>array('exp','goods_click-1000'));
$model->update($data);
//等同於:UPDATE `goods` SET goods_click=goods_click-1000 WHERE ( goods_id = '2' )
24.
動態方法:系統內置getby_和getfby_兩個動態方法,格式以下:
getby_ + 字段名(字段值)
getfby_ + 條件字段名(條件字段值,返回字段名)
結合示例來講明動態方法的使用
$model = Model('member');
//使用getby_動態方法,取得member_name爲kevin的會員信息
$model->getby_member_name('kevin');
//等同於SQL:SELECT * FROM `member` WHERE ( member_name = 'kevin' ) LIMIT 1
//使用getfby_方法,取得member_id爲6的會員名
$a = $model->getfby_member_id(6,'member_name'); //返回 kevin
//等同於SQL:SELECT member_name FROM `shopnc_member` WHERE ( member_id = '6' ) LIMIT 1
25.
設置SQL執行優先級:系統支持使用SQL關鍵字LOW_PRIORITY、DELAYED、HIGH_PRIORITY,格式以下:
attr(關鍵字)
結合示例來講明動態方法的使用
$model = Model('goods');
$model->where(array('goods_id' => 100))->attr('LOW_PRIORITY');
$model->update(array('goods_click' =>array('exp','goods_click+1')));
//等同於
//UPDATE LOW_PRIORITY `shopnc_goods` SET goods_click=goods_click+1 WHERE ( goods_id = '100' )