• 方法用于ThinkPHP3.1快速入门连贯操作


    最近研究方法用于,稍微总结一下,后以继续补充:

        

    分析

        联贯作操可以效有的进步据数存取的代码清晰度和发开效率,并且支撑全部的CURD作操,也是ThinkPHP的ORM中的一个亮点。应用也比较简单, 假如我们现在要询查一个User表的足满状态为1的前10条录记,并希望按照用户的建创时光排序 ,代码如下:

    $User->where('status=1')->order('create_time')->limit(10)->select();

        这里的

        

        where

        

        、

        

        order

        

        和

        

        limit

        

        方法就称之为联贯作操方法,除了select方法必须放到最后一个外(因为select方法并非联贯作操方法),联贯作操的方法调用序顺没有前后,例如,面上的代码和面上的效等:

    $User->order('create_time')->limit(10)->where('status=1')->select();

        其实不仅仅是询查方法可以应用联贯作操,包含全部的CURD方法都可以应用,例如:

    $User->where('id=1')->field('id,name,email')->find(); 
    $User->where('status=1 and id=1')->delete();

        联贯作操仅在当次询查或者作操效有,实现后会动自清空联贯作操的全部传值(有一般殊特的联贯作操会录记前当的传值,如cache联贯作操)。简而言之,联贯作操的结果不会带入后以的询查。

        统系支撑的联贯作操方法有:

        

    方法用作支撑的参数类型
    where 用于询查或者更新件条的定义 字符串、数组和对象
    table 用于定义要作操的据数表名称 字符串和数组
    alias 用于给前当据数表定义名别 字符串
    data 用于新增或者更新据数之前的据数对象赋值 数组和对象
    field 用于定义要询查的段字(支撑段字除排) 字符串和数组
    order 用于对结果排序 字符串和数组
    limit 用于制约询查结果数量 字符串和数字
    page 用于询查页分(部内会转换成limit) 字符串和数字
    group 用于对询查的group支撑 字符串
    having 用于对询查的having支撑 字符串
    join* 用于对询查的join支撑 字符串和数组
    union* 用于对询查的union支撑 字符串、数组和对象
    distinct 用于询查的distinct支撑 布尔值
    lock 用于据数库的锁制机 布尔值
    cache 用于询查存缓 支撑多个参数(后以在存缓部份再具体述描)
    relation 用于关联询查(须要关联模型展扩支撑) 字符串
    validate 用于据数动自验证 数组
    auto 用于据数动自实现 数组
    filter 用于据数过滤 字符串
    scope* 用于命名范围 字符串、数组

        全部的联贯作操都返回前当的模型例实对象(this),其中带*标识的示表支撑多次调用。

        

    用法

        由于联贯作操的应用往往涉及到多个方法的结合应用,面上大概分析下各个联贯作操的基本用法:

        

    WHERE

        

    where 用于询查或者更新件条的定义
    用法 where($where)
    参数 where(必须):询查或者作操件条,支撑字符串、数组和对象
    返回值 前当模型例实
    备注 如果不调用where方法,认默不会执行更新和删除作操

        Where方法是应用最多的联贯作操方法,更具体的用法请考参:

        速快入门(3)询查语言

        。

        

    TABLE

        

    table定义要作操的据数表名称,动态转变前当作操的据数表名称,须要写据数表的全名,含包前缀,可以应用名别和跨库作操
    用法 table($table)
    参数 table(必须):据数表名称,支撑作操多个表,支撑字符串、数组和对象
    返回值 前当模型例实
    备注 如果不调用table方法,会动自获得模型对应或者定义的据数表

        用法示例:

    $Model->Table('think_user user')->where('status>1')->select();

        也可以在table方法中跨库作操,例如:

    $Model->Table('db_name.think_user user')->where('status>1')->select();

        Table方法的参数支撑字符串和数组,数组式方的用法:

    $Model->Table(array('think_user'=>'user','think_group'=>'group'))->where('status>1')->select();

        应用数组式方定义的势优是可以免避因为表名和关键字冲突而犯错的情况。

        一般情况下,无需调用table方法,认默会动自获得前当模型对应或者定义的据数表。

        

    DATA

        

    data可以用于新增或者存保据数之前的据数对象赋值
    用法 data($data)
    参数 data(必须):据数,支撑数组和对象
    返回值 前当模型例实
    备注 如果不调用data方法,则会取前当的据数对象或者传入add和save的据数

        应用示例:

    $Model->data($data)->add();
    $Model->data($data)->where('id=3')->save();

        Data方法的参数支撑对象和数组,如果是对象会动自转换成数组。如果不定义data方法赋值,也可以应用create方法或者手动给据数对象赋值的式方。

        模型的data方法除了建创据数对象以外,还可以读取前当的据数对象,

        例如:

    $this->find(3);
    $data = $this->data();

        

    FIELD

        

    field用于定义要询查的段字
    用法 field($field,$except=false)
    参数

    field(必须):段字名,支撑字符串和数组,支撑指定段字名别;如果为true则示表显式或者据数表的全部段字。

    except(可选):否是除排,认默为false,如果为true示表定义的段字为据数表中除排field参数定义以外的全部段字。

    返回值 前当模型例实
    备注 如果不调用field方法,则认默返回全部段字,和field('*')效等

        应用示例:

    $Model->field('id,nickname as name')->select();
    $Model->field(array('id','nickname'=>'name'))->select();

        如果不调用field方法或者field方法传入参数为空的话,和应用field('*')是效等的。

        如果须要显式的传入全部的段字,可以应用面上的方法:

    $Model->field(true)->select();

        但是我们更议建只获得须要显式的段字名,或者采取段字除排式方来定义,例如:

    $Model->field('status',true)->select();

        示表获得除了status以外的全部段字。

        

    ORDER

        

    order用于对作操结果排序
    用法 order($order)
    参数 order(必须):排序的段字名,支撑字符串和数组,支撑多个段字排序
    返回值 前当模型例实
    备注 如果不调用order方法,按照据数库的认默则规

        应用示例:

    order('id desc') 

        排序方法支撑对多个段字的排序

    order('status desc,id asc')

        order方法的参数支撑字符串和数组,数组的用法如下:

    order(array('status'=>'desc','id'))

        

    LIMIT

        

    limit用于定义要询查的结果制约(支撑全部的据数库类型)
    用法 limit($limit)
    参数 limit(必须):制约数量,支撑字符串
    返回值 前当模型例实
    备注 如果不调用limit方法,则示表没有制约

        备注 如果不调用limit方法,则示表没有制约

        我们晓得不同的据数库类型的limit用法是不尽雷同的,但是在ThinkPHP的用法里头始终是同一的方法,也就是limit('offset,length') ,无论是Mysql、SqlServer还是Oracle据数库,都是这样应用,统系的据数库驱动类会担任决解这个异差化。

        应用示例:

    limit('1,10')

        也可以用面上的写法,是效等的:

    limit(1,10)

        如果应用

    limit('10')

        效等于

    limit('0,10')
        每日一道理
    正所谓“学海无涯”。我们正像一群群鱼儿在茫茫的知识之海中跳跃、 嬉戏,在知识之海中出生、成长、生活。我们离不开这维持生活的“海水”,如果跳出这个“海洋”,到“陆地”上去生活,我们就会被无情的“太阳”晒死。

        

    PAGE

        

    page 用于定义要询查的据数页分
    用法 page($page)
    参数 page(必须):页分,支撑字符串
    返回值 前当模型例实
    备注

        Page作操方法是新增的特性,可以更加速快的行进页分询查。

        Page方法的用法和limit方法似相,式格为:

    Page('page[,listRows]')

        Page示表前当的页数,listRows示表每页示显的录记数。例如:

    Page('2,10')

        示表每页示显10条录记的情况面上,获得第2页的据数。

        面上的写法效等:

    Page(2,10);

        listRow如果不写的话,会读取limit('length') 的值,例如:

    limit(25)->page(3);

        示表每页示显25条录记的情况面上,获得第3页的据数。

        如果limit也没有设置的话,则认默为每页示显20条录记。

        page方法加增第二个参数支撑,例如:

    $this->page(5,25)->select();

        和之前的用法

    $this->limit('5,25')->select();

        效等。

        

    GROUP

        

    group 用于据数库的group询查支撑
    用法 group($group)
    参数 group(必须):group的段字名,支撑字符串
    返回值 前当模型例实
    备注

        应用示例:

    group('user_id')

        Group方法的参数只支撑字符串

        

    HAVING

        

    having 用于据数库的having询查支撑
    用法 having($having)
    参数 having(必须):having,支撑字符串
    返回值 前当模型例实
    备注

        应用示例:

    having('user_id>0')

        having方法的参数只支撑字符串

        

    JOIN

        

    join 用于据数库的join询查支撑
    用法 join($join)
    参数 join(必须):join作操,支撑字符串和数组
    返回值 前当模型例实
    备注 join方法支撑多次调用

        应用示例:

    $Model->join(' work ON artist.id = work.artist_id')->join('card ON artist.card_id = card.id')->select();

        认默采取LEFT JOIN 式方,如果须要用其他的JOIN式方,可以改成

    $Model->join('RIGHT JOIN work ON artist.id = work.artist_id')->select();

        如果join方法的参数用数组的话,只能应用一次join方法,并且不能和字符串式方合混应用。

        例如:

    join(array(' work ON artist.id = work.artist_id','card ON artist.card_id = card.id'))

        

    UNION

        

    union 用于据数库的union询查支撑
    用法 union($union,$all=false)
    参数 union(必须):union作操,支撑字符串、数组和对象 all(可选):否是采取UNION ALL 作操,认默为false
    返回值 前当模型例实
    备注 Union方法支撑多次调用

        应用示例:

    $Model->field('name')
          ->table('think_user_0')
          ->union('SELECT name FROM think_user_1')
          ->union('SELECT name FROM think_user_2')
          ->select();

        数组用法:

    $Model->field('name')
          ->table('think_user_0')
          ->union(array('field'=>'name','table'=>'think_user_1'))
          ->union(array('field'=>'name','table'=>'think_user_2'))
          ->select();

        或者

    $Model->field('name')
          ->table('think_user_0')
          ->union(array('SELECT name FROM think_user_1','SELECT name FROM think_user_2'))
          ->select();

        支撑UNION ALL 作操,例如:

    $Model->field('name')
          ->table('think_user_0')
          ->union('SELECT name FROM think_user_1',true)
          ->union('SELECT name FROM think_user_2',true)
          ->select();

        或者

    $Model->field('name')
          ->table('think_user_0')
          ->union(array('SELECT name FROM think_user_1','SELECT name FROM think_user_2'),true)
          ->select();

        个每union方法相当于一个独立的SELECT句语。

        注意:UNION 部内的 SELECT 句语必须有具雷同数量的列。列也必须有具似相的据数类型。同时,每条 SELECT 句语中的列的序顺必须雷同。

        

    DISTINCT

        

    distinct 询查据数的时候行进独一过滤
    用法 distinct($distinct)
    参数 distinct(必须):否是采取distinct,支撑布尔值
    返回值 前当模型例实
    备注

        应用示例:

    $Model->Distinct(true)->field('name')->select();

        

    LOCK

        

    lock 用于询查或者写入锁定
    用法 lock($lock)
    参数 lock(必须):否是须要锁定,支撑布尔值
    返回值 前当模型例实
    备注 join方法支撑多次调用

        Lock方法是用于据数库的锁制机,如果在询查或者执行作操的时候应用:

    lock(true)

        就会动自在成生的SQL句语最后加上 FOR UPDATE或者FOR UPDATE NOWAIT(Oracle据数库)。

        

    VALIDATE

        

    validate 用于据数的动自验证
    用法 validate($validate)
    参数 validate(必须):动自验证定义
    返回值 前当模型例实
    备注 只能和create方法配合应用

        validate方法用于据数的动自验证,我们会在据数验证部份具体述描。

        

    AUTO

        

    auto 用于据数动自实现
    用法 auto($auto)
    参数 auto(必须):定义动自实现
    返回值 前当模型例实
    备注 auto方法只能配合create方法应用

        auto方法用于据数的动自实现作操,具体应用我们会在据数动自实现部份述描。

        

    SCOPE

        

    scope 用于模型的命名范围
    用法 scope($scope)
    参数 scope(必须):命名范围定义
    返回值 前当模型例实
    备注 scope方法是实其联贯作操的预定义

        scope方法的具体用法可以考参:

        3.1的新特性 命名范围

        

    FILTER

        

    filter 用于据数的安全过滤
    用法 filter($filter)
    参数 filter(必须):过滤方法名
    返回值 前当模型例实
    备注 filter方法一般用于写入和更新作操

        filter方法用于对据数对象的安全过滤,例如:

    $Model->data($data)->filter('strip_tags')->add();

        前目filter方法不支撑多个方法的过滤。

        

    总结

        联贯作操为我们的据数作操带来了很大的便捷的地方,并且只要SQL可以实现的作操,基本上都可以用ThinkPHP的联贯作操来实现,并且不必斟酌据数库之间的达表异差,有具可移植性。后面会和大家解讲如何作操和获得变量。

    文章结束给大家分享下程序员的一些笑话语录: 不会,Intel会维持高利润,也会维持竞争局面,国外的竞争不是打死对方的那种。你看日本有尼康,佳能,索尼,都做相机,大家都过得很滋润。别看一堆厂,其实真正控制的是后面的那几个财团——有些竞争对手,后面其实是一家人。

  • 相关阅读:
    69期-Java SE-029_XML解析
    69期-Java SE-028_网络编程-3
    Django(46)drf序列化类的使用(ModelSerializer)
    Django(45)drf序列化类的使用(Serializer)
    Django(44)drf序列化源码分析
    Django(43)restful接口规范
    Django(42)DRF安装与使用
    Django(41)详解异步任务框架Celery
    Django(40)解决celery报错 No module named 'click._bashcomplete'
    Django(39)使用redis配置缓存
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3065725.html
Copyright © 2020-2023  润新知