基础查询

Customer::find()->one();    此方法返回一条数据;

Customer::find()->all();    此方法返回所有数据;

Customer::find()->count();    此方法返回记录的数量;

Customer::find()->average();    此方法返回指定列的平均值;

Customer::find()->min();    此方法返回指定列的最小值 ;

Customer::find()->max();    此方法返回指定列的最大值 ;

Customer::find()->scalar();    此方法返回值的第一行第一列的查询结果;

Customer::find()->column();    此方法返回查询结果中的第一列的值;

Customer::find()->exists();    此方法返回一个值指示是否包含查询结果的数据行;

Customer::find()->batch(10);  每次取10条数据 

Customer::find()->each(10);  每次取10条数据,迭代查询 

//根据sql语句查询:查询name=test的客户
Customer::model()->findAllBySql("select * from customer where name = test");  //根据主键查询:查询主键值为1的数据
Customer::model()->findByPk(1);  //根据条件查询(该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面) 
Customer::model()->findAllByAttributes(['username'=>'admin']);  //子查询
$subQuery = (new Query())->select('COUNT(*)')->from('customer');
// SELECT `id`, (SELECT COUNT(*) FROM `customer`) AS `count` FROM `customer`
$query = (new Query())->select(['id', 'count' => $subQuery])->from('customer'); //关联查询:查询客户表(customer)关联订单表(orders),条件是status=1,客户id为1,从查询结果的第5条开始,查询10条数据
$data = (new Query())
    ->select('*')
    ->from('customer')
    ->join('LEFT JOIN','orders','customer.id = orders.customer_id')
    ->where(['status'=>'1','customer.id'=>'1'])
    ->offset(5)
    ->limit(10)
    ->all()

直接查询

  1.  
    //createCommand(执行原生的SQL语句)  
  2.  
    $sql= "SELECT u.account,i.* FROM sys_user as u left join user_info as i on u.id=i.user_id";  
  3.  
    $rows=Yii::$app->db->createCommand($sql)->query();  
  4.  
     
  5.  
    查询返回多行:    
  6.  
    $command = Yii::$app->db->createCommand('SELECT * FROM post');  
  7.  
    $posts = $command->queryAll();
  8.  
     
  9.  
    返回单行
  10.  
    $command = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=1');  
  11.  
    $post = $command->queryOne();
  12.  
      
  13.  
    查询多行单值:  
  14.  
    $command = Yii::$app->db->createCommand('SELECT title FROM post');  
  15.  
    $titles = $command->queryColumn();
  16.  
      
  17.  
    查询标量值/计算值:  
  18.  
    $command = Yii::$app->db->createCommand('SELECT COUNT(*) FROM post');  
  19.  
    $postCount = $command->queryScalar();

关联查询

  1.  
    /**
  2.  
     *客户表Model:CustomerModel 
  3.  
     *订单表Model:OrdersModel
  4.  
     *国家表Model:CountrysModel
  5.  
     *首先要建立表与表之间的关系 
  6.  
     *在CustomerModel中添加与订单的关系
  7.  
     */     
  8.  
    Class CustomerModel extends \yii\db\ActiveRecord
  9.  
    {
  10.  
        ...
  11.  
        //客户和订单是一对多的关系所以用hasMany
  12.  
        //此处OrdersModel在CustomerModel顶部别忘了加对应的命名空间
  13.  
        //id对应的是OrdersModel的id字段,order_id对应CustomerModel的order_id字段
  14.  
        public function getOrders()
  15.  
        {
  16.  
            return $this->hasMany(OrdersModel::className(), ['id'=>'order_id']);
  17.  
        }
  18.  
        
  19.  
        //客户和国家是一对一的关系所以用hasOne
  20.  
        public function getCountry()
  21.  
        {
  22.  
            return $this->hasOne(CountrysModel::className(), ['id'=>'Country_id']);
  23.  
        }
  24.  
        ....
  25.  
    }
  26.  
          
  27.  
    // 查询客户与他们的订单和国家
  28.  
    CustomerModel::find()->with('orders', 'country')->all();
  29.  
     
  30.  
    // 查询客户与他们的订单和订单的发货地址(注:orders 与 address都是关联关系)
  31.  
    CustomerModel::find()->with('orders.address')->all();
  32.  
     
  33.  
    // 查询客户与他们的国家和状态为1的订单
  34.  
    CustomerModel::find()->with([
  35.  
        'orders' => function ($query) {
  36.  
            $query->andWhere('status = 1');
  37.  
            },
  38.  
            'country',
  39.  
    ])->all();

YII 框架查询的更多相关文章

  1. 三级联动(在YII框架中)

    //三级联动 //数据库代码过多就不上传了 //视图 <div class="area">    <table class="table"&g ...

  2. Yii框架 多表查询实例

    Yii框架多表查询实例:总共分为两个步骤(以下的代码我全部都写在model中):1.先在主表model中声明关联表中所需要查询的字段. public $surveyls_description; // ...

  3. 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server

    原文转自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 ...

  4. Yii 框架学习--01 框架入门

    Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架. Yii目前有两个主要的版本: 2.0 和 1.1.本文以YII 2.0.7为例. 环境需求 Yii2.0 框架有一些系统上的需 ...

  5. php--yii框架中的ajax分页与yii框架自带的分页

    要想使用Yii分页类 第一步:在控制器层加载分页类 use yii\data\Pagination; 第二步: 使用model层查询数据,并用分分页,限制每页的显示条数 $data = Zhao::f ...

  6. yii框架

    Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.Yii是最有效率的PHP框架之一.Yii是创始人 ...

  7. YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)

           YII 框架源码分析    百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...

  8. Yii框架tips(转)

    yii的一些小的技巧 http://www.yiichina.com/topic/151 db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何 ...

  9. Yii框架tips

    db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何在页面下边显示sql的查询时间在log组件的routes中加入 array('class' ...

随机推荐

  1. 转Web开发的发展史---Web开发技术的演变

    转自:http://blog.csdn.net/zzzkk2009/article/details/9849431 在接下来的几个月时间里,我打算写一系列关于完整web开发的文章.这第一篇文章虽然有所 ...

  2. 3ds Max学习日记(四)

      下午去实验室见了师姐,人还挺好,给我安排了任务,和3ds max没有半毛钱关系. 附上今日的劳动成果:   板子(牌匾)   简约吊灯(看上去比较单调)   高脚杯(喝酒用的)   沙发(沙发) ...

  3. 【week2】 累计进度条、psp、饼图

    每周例行报告 本周PSP 类别 任务 开始时间 结束时间 被打断时间 总计工作时间 2016年9月9日 读书 构建之法-5.6章 19:00 20:00 0 60min 2016年9月10日 看博客 ...

  4. 【转载】Windows下Mysql5.7开启binlog步骤及注意事项

    转自:https://www.cnblogs.com/wangwust/p/6433453.html 1.查看是否开启了binlog:show binary logs; 默认情况下是不开启的. 2.开 ...

  5. 织梦CMS建站入门学习(二)

    织梦建站的数据库设计: 1.模型表:根据网站的需求,建立不同的数据模型,如:文章浏览,软件下载,视频观看等等. 2.栏目表:根据网站的需求,建立不同的栏目,每一个栏目选择一个数据模型. 3.内容主表: ...

  6. IO Model- 同步,异步,阻塞,非阻塞

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  7. 使用WebClient类对网页下载源码,对文件下载保存及异步下载并报告下载进度

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAx4AAAI7CAIAAADtTtpYAAAgAElEQVR4nO3dX6xlV33Y8f3UJFUqHq

  8. 【Python】Python 过滤列表

    如你所知,Python 具有通过列表解析将列表映射到其它列表的强大能力.这种能力同过滤机制结合使用,使列表中的有些元素被映射的同时跳过另外一些元素.过滤列表语法: [mapping-expressio ...

  9. imfilter与fspecial

    saliencyMap = imfilter(saliencyMap,fspecial('gaussian',round(scale/64*3),min(scale/64*3*5/4))); fspe ...

  10. hdu5696区间的价值 -- 2016"百度之星" - 初赛(Astar Round2B)

    Problem Description 我们定义“区间的价值”为一段区间的最大值*最小值. 一个区间左端点在L,右端点在R,那么该区间的长度为(R−L+1). 现在聪明的杰西想要知道,对于长度为k的区 ...