YII 框架查询

Posted 梳碧湖的砍柴人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
  40.  

以上是关于YII 框架查询的主要内容,如果未能解决你的问题,请参考以下文章

yii数据库查询操作总结

Yii框架2 ActiveRecord的join函数中如何使用子查询?

Yii,MongoDB查询子文档以插入Mysql表

Yii2框架学习 4-1 modelSearch类学习 自定义搜索,关联查询

Yii 框架里数据库操作详解-[增加查询更新删除的方法 'AR模式']

21.Yii2.0框架多表关联一对多查询之性能优化--模型的使用