Yii - ตัวสร้างแบบสอบถาม

ตัวสร้างแบบสอบถามช่วยให้คุณสร้างแบบสอบถาม SQL ด้วยวิธีทางโปรแกรม ตัวสร้างแบบสอบถามช่วยให้คุณเขียนโค้ดที่เกี่ยวข้องกับ SQL ที่อ่านได้มากขึ้น

ในการใช้ตัวสร้างแบบสอบถามคุณควรทำตามขั้นตอนเหล่านี้ -

  • สร้างวัตถุ yii \ db \ Query
  • เรียกใช้วิธีการสืบค้น

เพื่อสร้างไฟล์ yii\db\Query คุณควรเรียกใช้ฟังก์ชันตัวสร้างแบบสอบถามที่แตกต่างกันเพื่อกำหนดส่วนต่างๆของแบบสอบถาม SQL

Step 1 - หากต้องการแสดงการใช้งานทั่วไปของตัวสร้างแบบสอบถามให้แก้ไขไฟล์ actionTestDb วิธีนี้

public function actionTestDb() {
   //generates "SELECT id, name, email FROM user WHERE name = 'User10';"
   $user = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where(['name' => 'User10']) ->one(); var_dump($user);
}

Step 2 - ไปที่ http://localhost:8080/index.php?r=site/test-dbคุณจะเห็นผลลัพธ์ต่อไปนี้

ฟังก์ชัน Where ()

where()ฟังก์ชันกำหนดส่วน WHERE ของแบบสอบถาม เพื่อระบุกWHERE เงื่อนไขคุณสามารถใช้สามรูปแบบ

  • string format - 'ชื่อ = User10'

  • hash format - ['name' => 'User10', 'email => [email protected]']

  • operator format - ['like', 'name', 'User']

ตัวอย่างรูปแบบ String

public function actionTestDb() {
   $user = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where('name = :name', [':name' => 'User11']) ->one(); var_dump($user);
}

ต่อไปนี้จะเป็นผลลัพธ์

ตัวอย่างรูปแบบ Hash

public function actionTestDb() {
   $user = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where([ 'name' => 'User5', 'email' => '[email protected]' ]) ->one(); var_dump($user);
}

ต่อไปนี้จะเป็นผลลัพธ์

รูปแบบตัวดำเนินการช่วยให้คุณกำหนดเงื่อนไขโดยพลการในรูปแบบต่อไปนี้ -

[operator, operand1, operand2]

ตัวดำเนินการสามารถ -

  • and - ['and', 'id = 1', 'id = 2'] จะสร้าง id = 1 AND id = 2 หรือ: คล้ายกับตัวดำเนินการและ

  • between - ['between', 'id', 1, 15] จะสร้าง id ระหว่าง 1 และ 15

  • not between - คล้ายกับตัวดำเนินการระหว่าง แต่ระหว่างนั้นจะถูกแทนที่ด้วย NOT BETWEEN

  • in - ['in', 'id', [5,10,15]] จะสร้าง id IN (5,10,15)

  • not in - คล้ายกับตัวดำเนินการ in แต่ IN ถูกแทนที่ด้วย NOT IN

  • like - ['like', 'name', 'user'] จะสร้างชื่อ LIKE '% user%'

  • or like - คล้ายกับตัวดำเนินการ like แต่ OR ใช้เพื่อแบ่งเพรดิเคต LIKE

  • not like - คล้ายกับตัวดำเนินการ like แต่ LIKE จะถูกแทนที่ด้วย NOT LIKE

  • or not like - คล้ายกับตัวดำเนินการที่ไม่เหมือน แต่ OR ใช้เพื่อต่อเพรดิเคตไม่ชอบ

  • exists - ต้องการตัวถูกดำเนินการหนึ่งตัวซึ่งต้องเป็นอินสแตนซ์ของคลาส yii \ db \ Query

  • not exists - คล้ายกับตัวดำเนินการที่มีอยู่ แต่สร้างนิพจน์ NOT EXISTS (แบบสอบถามย่อย)

  • <, <=, >, >=, หรือตัวดำเนินการ DB อื่น ๆ : ['<', 'id', 10] จะสร้าง id <10

ตัวอย่างรูปแบบตัวดำเนินการ

public function actionTestDb() {
   $users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->where(['between', 'id', 5, 7]) ->all(); var_dump($users);
}

ต่อไปนี้จะเป็นผลลัพธ์

ฟังก์ชัน OrderBy ()

orderBy() ฟังก์ชันกำหนดส่วน ORDER BY

Example -

public function actionTestDb() {
   $users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->orderBy('name DESC') ->all(); var_dump($users);
}

ต่อไปนี้จะเป็นผลลัพธ์

groupBy () ฟังก์ชัน

groupBy() ฟังก์ชันกำหนดส่วน GROUP BY ในขณะที่ having() วิธีการระบุส่วน HAVING

Example -

public function actionTestDb() {
   $users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->groupBy('name') ->having('id < 5') ->all(); var_dump($users);
}

ต่อไปนี้จะเป็นผลลัพธ์

limit() และ offset() วิธีการกำหนด LIMIT และ OFFSET เศษ

Example -

public function actionTestDb() {
   $users = (new \yii\db\Query()) ->select(['id', 'name', 'email']) ->from('user') ->limit(5) ->offset(5) ->all(); var_dump($users);
}

คุณสามารถดูผลลัพธ์ต่อไปนี้ -

yii\db\Query คลาสมีชุดวิธีการสำหรับวัตถุประสงค์ที่แตกต่างกัน -

  • all() - ส่งคืนอาร์เรย์ของแถวคู่ชื่อ - ค่า

  • one() - ส่งคืนแถวแรก

  • column() - ส่งคืนคอลัมน์แรก

  • scalar() - ส่งคืนค่าสเกลาร์จากแถวแรกและคอลัมน์แรกของผลลัพธ์

  • exists() - ส่งกลับค่าที่ระบุว่าแบบสอบถามมีผลลัพธ์หรือไม่

  • count() ส่งคืนผลลัพธ์ของแบบสอบถาม COUNT รายการ

  • other aggregation query methods - รวมผลรวม ($q), average($q) สูงสุด ($q), min($q) พารามิเตอร์ $ q สามารถเป็นชื่อคอลัมน์หรือนิพจน์ DB