連貫操作之ORDER排序
order多個(gè)條件用逗號(hào)隔開
M('user')->order('age desc')->select();
連貫操作之field方法
field規(guī)定要查詢的字段
M('user')->field('name')->order('age desc')->select();
連貫操作之limit和page方法
limit(start,length)傳入開始位置以及數(shù)據(jù)長度
$data = M('user')
->field('name')
->order('age desc')
->limit(1,2)
->select();
最簡單的分頁方式page(頁碼厦瓢,每頁條數(shù)=20)砸彬,TP自帶有分頁類
$data = M('user')
->field('id')
->page(1,5)
->select();
連貫操作之group和having方法
給定having條件進(jìn)行g(shù)roup分組
$data = M('user')
->field('age,count(*) as total')
->having('age < 20')
->group('age')
->select();
多表查詢之table方法
table(array('表名'=>'別名')) 這里多表查詢時(shí)需要加表前綴
$data = M()
->table(array('onethink_shopgoods'=>'shop','onethink_shopcate'=>'cate'))
->where('cate.id=shop.cid')
->select();
多表查詢之join方法
join默認(rèn)情況下是inner join和左關(guān)聯(lián)是一樣的
M('shopgoods')->join('onethink_shopcate on onethink_shopcate.id=onethink_shopgoods.cid')->select();
右關(guān)聯(lián)芽卿,以右表為基礎(chǔ)匹配左表
M('shopgoods')->join('right join onethink_shopcate on onethink_shopcate.id=onethink_shopgoods.cid')->select();
多表查詢之union方法
用于查詢沒有主從關(guān)系表數(shù)據(jù)
union查詢出來的結(jié)果是去掉重復(fù)的
//查詢字段時(shí)順序不能顛倒
$data = M('shopgoods')
->field('name')
->union('select name from onethink_shopgood')
->select();
unionAll查詢出來的結(jié)果是不去重的
$data = M('shopgoods')
->field('name')
->union('select name from onethink_shopgood',true)
->select();
多表查詢之distinct方法
過濾查詢distinct
$data = M('shopgoods')
->field('level')
->distinct(true)
->select();
命名范圍scope的使用
在連貫操作過程中總是在寫重復(fù)的規(guī)則肋僧,那么框架提供了一個(gè)新的功能命名范圍羞秤,這個(gè)命名范圍就是給模型定義一系列的連貫操作的封裝来候,讓我們查詢起來更加的方便跷叉;
命名范圍的好處是一次定義多次調(diào)用,在項(xiàng)目開發(fā)過程中可以作為項(xiàng)目分工配合的規(guī)范营搅,避免在開發(fā)過程中寫CURD的時(shí)候出現(xiàn)問題云挟;
//在模型文件里進(jìn)行封裝
protected $_scope = array(
'status' => array(
'where' => array(
'status' => array('eq',2),
),
'order' => 'id desc',
),
'ziduan' => array(
'field' => 'name,id',
),
);
//在控制器中進(jìn)行調(diào)用
$model = D('Shopgoods');
$data = $model->scope('ziduan,status')->select();
如果兩個(gè)命名范圍定義存在沖突,則后面調(diào)用的命名范圍規(guī)則會(huì)覆蓋前面的转质,例如:limit园欣;