1. 程式人生 > >YII 框架查詢

YII 框架查詢

UNC mode 標量 單行 最小值 comm b- 數據行 子查詢

基礎查詢

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. $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();

關聯查詢

  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();

YII 框架查詢