Yii - Trình tạo truy vấn

Trình tạo truy vấn cho phép bạn tạo các truy vấn SQL theo cách lập trình. Trình tạo truy vấn giúp bạn viết mã liên quan đến SQL dễ đọc hơn.

Để sử dụng trình tạo truy vấn, bạn nên làm theo các bước sau:

  • Xây dựng một đối tượng yii \ db \ Query.
  • Thực thi một phương thức truy vấn.

Để xây dựng một yii\db\Query , bạn nên gọi các hàm trình tạo truy vấn khác nhau để xác định các phần khác nhau của truy vấn SQL.

Step 1 - Để hiển thị cách sử dụng điển hình của trình tạo truy vấn, hãy sửa đổi actionTestDb phương pháp này theo cách này.

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 - Đi tới http://localhost:8080/index.php?r=site/test-db, bạn sẽ thấy kết quả sau.

Hàm where ()

Các where()hàm xác định phân đoạn WHERE của một truy vấn. Để chỉ định mộtWHERE điều kiện, bạn có thể sử dụng ba định dạng.

  • string format - 'name = User10'

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

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

Ví dụ về định dạng chuỗi

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

Sau đây sẽ là đầu ra.

Ví dụ về định dạng băm

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

Sau đây sẽ là đầu ra.

Định dạng toán tử cho phép bạn xác định các điều kiện tùy ý theo định dạng sau:

[operator, operand1, operand2]

Người điều hành có thể là -

  • and - ['và', 'id = 1', 'id = 2'] sẽ tạo id = 1 VÀ id = 2 hoặc: tương tự với toán tử and

  • between - ['between', 'id', 1, 15] sẽ tạo id GIỮA 1 VÀ 15

  • not between - tương tự như toán tử between, nhưng BETWEEN được thay thế bằng NOT BETWEEN

  • in - ['in', 'id', [5,10,15]] sẽ tạo id IN (5,10,15)

  • not in - tương tự như toán tử in, nhưng IN được thay thế bằng NOT IN

  • like - ['like', 'name', 'user'] sẽ tạo tên LIKE '% user%'

  • or like - tương tự như toán tử like, nhưng OR được sử dụng để tách các vị từ LIKE

  • not like - tương tự với toán tử like, nhưng LIKE được thay thế bằng NOT LIKE

  • or not like - tương tự như toán tử not like, nhưng OR được sử dụng để nối các vị từ NOT LIKE

  • exists - yêu cầu một toán hạng phải là một thể hiện của lớp yii \ db \ Query

  • not exists - tương tự như toán tử tồn tại, nhưng xây dựng biểu thức KHÔNG TỒN TẠI (truy vấn con)

  • <, <=, >, >=, hoặc bất kỳ toán tử DB nào khác: ['<', 'id', 10] sẽ tạo id <10

Ví dụ về định dạng Toán tử

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

Sau đây sẽ là đầu ra.

Hàm OrderBy ()

Các orderBy() hàm định nghĩa phân đoạn ORDER BY.

Example -

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

Sau đây sẽ là đầu ra.

Hàm groupBy ()

Các groupBy() hàm xác định phân đoạn GROUP BY, trong khi having() phương thức chỉ định phân đoạn 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);
}

Sau đây sẽ là đầu ra.

Các limit()offset() các phương thức xác định LIMITOFFSET mảnh vỡ.

Example -

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

Bạn có thể xem kết quả sau:

Các yii\db\Query lớp cung cấp một tập hợp các phương thức cho các mục đích khác nhau -

  • all() - Trả về một mảng gồm các cặp tên-giá trị.

  • one() - Trả về hàng đầu tiên.

  • column() - Trả về cột đầu tiên.

  • scalar() - Trả về một giá trị vô hướng từ hàng đầu tiên và cột đầu tiên của kết quả.

  • exists() - Trả về giá trị cho biết truy vấn có chứa bất kỳ kết quả nào hay không

  • count() Trả về kết quả của một truy vấn COUNT

  • other aggregation query methods - Bao gồm tổng ($q), average($q), tối đa ($q), min($q). Tham số $ q có thể là tên cột hoặc biểu thức DB.