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