Yii-query-builder

提供:Dev Guides
移動先:案内検索

Yii-クエリビルダー

クエリビルダーを使用すると、プログラムでSQLクエリを作成できます。 クエリビルダーを使用すると、より読みやすいSQL関連のコードを記述できます。

クエリビルダーを使用するには、次の手順に従う必要があります-

  • yii \ db \ Queryオブジェクトを作成します。

  • クエリメソッドを実行します。

    *yii \ db \ Query* オブジェクトを作成するには、さまざまなクエリビルダー関数を呼び出して、SQLクエリのさまざまな部分を定義する必要があります。

ステップ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);
}

ステップ2 *- *http://localhost:8080/index.php?r = site/test-db に移動すると、次の出力が表示されます。

クエリビルダ

Where()関数

  • where()関数は、クエリのWHEREフラグメントを定義します。 *WHERE 条件を指定するには、3つの形式を使用できます。
  • 文字列形式-'name = User10'
  • ハッシュ形式-['name' ⇒ 'User10'、 'email ⇒ [email protected]']
  • 演算子形式-['like'、 'name'、 'User']

文字列形式の例

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

出力は次のようになります。

文字列形式の出力例

ハッシュ形式の例

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 BETWEEN 1 AND 15を生成します
  • not between -between演算子に似ていますが、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%'を生成します
  • *またはlike *-like演算子に似ていますが、ORを使用してLIKE述語を分割します
  • not like -like演算子に似ていますが、LIKEはNOT LIKEに置き換えられます
  • *またはnot like *-not like演算子に似ていますが、ORを使用してNOT LIKE述語を連結します
  • exists -yii \ db \ Queryのインスタンスでなければならない1つのオペランドが必要です クラス
  • not exists -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フラグメントを定義します。

-

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

出力は次のようになります。

OrderBy関数の出力例

groupBy()関数

  • groupBy()関数はGROUP BYフラグメントを定義し、 having()*メソッドはHAVINGフラグメントを指定します。

-

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

出力は次のようになります。

groupBy関数の出力例

  • limit()および offset()メソッドは、 *LIMIT および OFFSET フラグメントを定義します。

-

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クエリの結果を返します
  • その他の集計クエリメソッド-sum($ q)、average($ q)、max($ q)、min($ q)が含まれます。 $ qパラメーターは、列名またはDB式のいずれかです。