连贯操作之ORDER排序
order多个条件用逗号隔开
M('user')->order('age desc')->select();
连贯操作之field方法
field规定要查询的字段
M('user')->field('name')->order('age desc')->select();
连贯操作之limit和page方法
limit(start,length)传入开始位置以及数据长度
$data = M('user')
->field('name')
->order('age desc')
->limit(1,2)
->select();
最简单的分页方式page(页码,每页条数=20),TP自带有分页类
$data = M('user')
->field('id')
->page(1,5)
->select();
连贯操作之group和having方法
给定having条件进行group分组
$data = M('user')
->field('age,count(*) as total')
->having('age < 20')
->group('age')
->select();
多表查询之table方法
table(array('表名'=>'别名')) 这里多表查询时需要加表前缀
$data = M()
->table(array('onethink_shopgoods'=>'shop','onethink_shopcate'=>'cate'))
->where('cate.id=shop.cid')
->select();
多表查询之join方法
join默认情况下是inner join和左关联是一样的
M('shopgoods')->join('onethink_shopcate on onethink_shopcate.id=onethink_shopgoods.cid')->select();
右关联,以右表为基础匹配左表
M('shopgoods')->join('right join onethink_shopcate on onethink_shopcate.id=onethink_shopgoods.cid')->select();
多表查询之union方法
用于查询没有主从关系表数据
union查询出来的结果是去掉重复的
//查询字段时顺序不能颠倒
$data = M('shopgoods')
->field('name')
->union('select name from onethink_shopgood')
->select();
unionAll查询出来的结果是不去重的
$data = M('shopgoods')
->field('name')
->union('select name from onethink_shopgood',true)
->select();
多表查询之distinct方法
过滤查询distinct
$data = M('shopgoods')
->field('level')
->distinct(true)
->select();
命名范围scope的使用
在连贯操作过程中总是在写重复的规则,那么框架提供了一个新的功能命名范围,这个命名范围就是给模型定义一系列的连贯操作的封装,让我们查询起来更加的方便;
命名范围的好处是一次定义多次调用,在项目开发过程中可以作为项目分工配合的规范,避免在开发过程中写CURD的时候出现问题;
//在模型文件里进行封装
protected $_scope = array(
'status' => array(
'where' => array(
'status' => array('eq',2),
),
'order' => 'id desc',
),
'ziduan' => array(
'field' => 'name,id',
),
);
//在控制器中进行调用
$model = D('Shopgoods');
$data = $model->scope('ziduan,status')->select();
如果两个命名范围定义存在冲突,则后面调用的命名范围规则会覆盖前面的,例如:limit;
网友评论