zoukankan      html  css  js  c++  java
  • YII 框架查询

    基础查询

    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 yiidbActiveRecord
    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();
  • 相关阅读:
    uniapp、小程序之swiperitem内容过多显示不全的解决方案
    PingFang(苹方)字体的引用
    Vue项目中使用websocket
    uniapp页面跳转传递参数过长
    uniapp开发的h5,使用微信授权登录(前置条件+具体代码)
    Maven工具安装使用
    Lombok代码生成插件使用
    对不起,我的文章暂时无法公开!
    [iOS]学习笔记7(CATransform3DFlip效果)
    [iOS]学习笔记8 (iOS之阻塞)
  • 原文地址:https://www.cnblogs.com/kkdn/p/9303060.html
Copyright © 2011-2022 走看看