您现在的位置是:首页 > 博客日记 > Php Php

yii 查询语句

2019-09-23 16:40:49 【Php】 人已围观

直接yii查询

  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. $command = Yii::$app->db->createCommand('SELECT * FROM post');
  6. $posts = $command->queryAll();
  7. 返回单行
  8. $command = Yii::$app->db->createCommand('SELECT * FROM post WHERE id=1');
  9. $post = $command->queryOne();
  10. 查询多行单值:
  11. $command = Yii::$app->db->createCommand('SELECT title FROM post');
  12. $titles = $command->queryColumn();
  13. 查询标量值/计算值:
  14. $command = Yii::$app->db->createCommand('SELECT COUNT(*) FROM post');
  15. $postCount = $command->queryScalar();

模型AR查询

  1. Customer::find()->one(); 此方法返回一条数据;
  2. Customer::find()->all(); 此方法返回所有数据;
  3. Customer::find()->count(); 此方法返回记录的数量;
  4. Customer::find()->average(); 此方法返回指定列的平均值;
  5. Customer::find()->min(); 此方法返回指定列的最小值
  6. Customer::find()->max(); 此方法返回指定列的最大值
  7. Customer::find()->scalar(); 此方法返回值的第一行第一列的查询结果;
  8. Customer::find()->column(); 此方法返回查询结果中的第一列的值;
  9. Customer::find()->exists(); 此方法返回一个值指示是否包含查询结果的数据行;
  10. Customer::find()->batch(10); 每次取10条数据
  11. Customer::find()->each(10); 每次取10条数据,迭代查询
  12. //根据sql语句查询:查询name=test的客户
  13. Customer::model()->findAllBySql("select * from customer where name = test");
  14. //根据主键查询:查询主键值为1的数据
  15. Customer::model()->findByPk(1);
  16. //根据条件查询(该方法是根据条件查询一个集合,可以是多个条件,把条件放到数组里面)
  17. Customer::model()->findAllByAttributes(['username'=>'admin']);
  18. //子查询
  19. $subQuery = (new Query())->select('COUNT(*)')->from('customer');
  20. // SELECT `id`, (SELECT COUNT(*) FROM `customer`) AS `count` FROM `customer`
  21. $query = (new Query())->select(['id', 'count' => $subQuery])->from('customer');
  22. //关联查询:查询客户表(customer)关联订单表(orders),条件是status=1,客户id为1,从查询结果的第5条开始,查询10条数据
  23. $data = (new Query())
  24. ->select('*')
  25. ->from('customer')
  26. ->join('LEFT JOIN','orders','customer.id = orders.customer_id')
  27. ->where(['status'=>'1','customer.id'=>'1'])
  28. ->offset(5)
  29. ->limit(10)
  30. ->all()

关联查询

  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. //客户和国家是一对一的关系所以用hasOne
  19. public function getCountry()
  20. {
  21. return $this->hasOne(CountrysModel::className(), ['id'=>'Country_id']);
  22. }
  23. ....
  24. }
  25. // 查询客户与他们的订单和国家
  26. CustomerModel::find()->with('orders', 'country')->all();
  27. // 查询客户与他们的订单和订单的发货地址(注:orders 与 address都是关联关系)
  28. CustomerModel::find()->with('orders.address')->all();
  29. // 查询客户与他们的国家和状态为1的订单
  30. CustomerModel::find()->with([
  31. 'orders' => function ($query) {
  32. $query->andWhere('status = 1');
  33. },
  34. 'country',
  35. ])->all();


关注TinyMeng博客,更多精彩分享,敬请期待!
 

很赞哦! ()