• 链式操作2


    page

    // 查询第一页数据
    Db::table('think_article')->limit('0,10')->select(); 
    // 查询第二页数据
    Db::table('think_article')->limit('10,10')->select(); 

    group

    Db::table('think_user')
        ->field('user_id,test_time,username,max(score)')
        ->group('user_id,test_time')
        ->select();
    SELECT user_id,test_time,username,max(score) FROM think_score GROUP BY user_id,test_time

    having

    Db::table('think_user')
        ->field('username,max(score)')
        ->group('user_id')
        ->having('count(test_time)>3')
        ->select(); 

    join

    Db::table('think_artist')
    ->alias('a')
    ->join('think_work w','a.id = w.artist_id')
    ->join('think_card c','a.card_id = c.id')
    ->select();

    union

    NION操作用于合并两个或多个 SELECT 语句的结果集。

    使用示例:

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

    闭包用法:

    Db::field('name')
          ->table('think_user_0')
          ->union(function($query){
          	$query->field('name')->table('think_user_1');
            })
          ->union(function($query){
          	$query->field('name')->table('think_user_2');
            })
          ->select();
    

    或者

    Db::field('name')
          ->table('think_user_0')
          ->union(['SELECT name FROM think_user_1','SELECT name FROM think_user_2'])
          ->select();
    

    支持UNION ALL 操作,例如:

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

    或者

    Db::field('name')
          ->table('think_user_0')
          ->union(['SELECT name FROM think_user_1','SELECT name FROM think_user_2'],true)
          ->select();


    cache

    Db::table('think_user')->where('id=5')->cache(true)->find();

    这里的缓存自动更新是指一旦数据更新或者删除后会自动清理缓存(下次获取的时候会自动重新缓存)。

    当你删除或者更新数据的时候,可以使用cache方法手动更新(清除)缓存,例如:

    Db::table('think_user')->cache('user_data')->select([1,3,5]);
    Db::table('think_user')->cache('user_data')->update(['id'=>1,'name'=>'thinkphp']);
    Db::table('think_user')->cache('user_data')->select([1,5]);
    

    最后查询的数据不会受第一条查询缓存的影响,确保查询和更新或者删除使用相同的缓存标识才能自动清除缓存。

    如果使用find方法并且使用主键查询的情况,不需要指定缓存标识,会自动清理缓存,例如:

    Db::table('think_user')->cache(true)->find(1);
    Db::table('think_user')->update(['id'=>1,'name'=>'thinkphp']);
    Db::table('think_user')->cache(true)->find(1);


    comment

    Db::table('think_score')->comment('查询考试前十名分数')
        ->field('username,score')
        ->limit(10)
        ->order('score desc')
        ->select();
    

    最终生成的SQL语句是:

    SELECT username,score FROM think_score ORDER BY score desc LIMIT 10 /* 查询考试前十名分数 */
     
     
  • 相关阅读:
    GitLab CI/CD的官译【原】
    Gearman介绍、原理分析、实践改进
    Golang逃逸分析
    Go 程序是怎样跑起来的
    分布式系统的常见玩法
    开发更高可用、高质量的服务的一些建议
    理解 Kubernetes 的亲和性调度
    服务发现对比:Zookeeper vs etcd vs Consul
    探索etcd,Zookeeper和Consul一致键值数据存储的性能
    CentOS 7 安装无线驱动
  • 原文地址:https://www.cnblogs.com/mmore123/p/12848455.html
Copyright © 2020-2023  润新知