ThinkPHP(四)

2017-08-21  本文已影响206人  PHPer_

连贯操作之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;

上一篇下一篇

猜你喜欢

热点阅读