条件
動的クエリにWHERE句を追加するには、condition()メソッドを使用します:
$query->condition('bundle', 'article', '=');
上記のコードは、クエリにarticleバンドルの結果をフィルタリングするよう指示します。ここでのフィールド名は、addField()またはaddExpression()メソッドで作成されたエイリアスである必要があることに注意してください。
Conditionパラメーター
condition()メソッドは3つのパラメーターを受け取ります:
- $field - 比較するフィールド(必須)。
- $value - 比較する値(オプション、デフォルトはNULL)。
- $operator - 比較演算子(オプション、デフォルトは'=')
サポートされている演算子
一般的な比較演算子'='、'<>'、'<'、'<='、'>'、'> ='は、サポートされているすべてのデータベースタイプでサポートされています。
IN、NOT INの使用
INおよびNOT IN演算子は$valueに配列を受け取り、フィールドの値を配列の値と比較します。
$users = [2,5,17,22];
$query->condition('uid', $users, 'IN');
この例では、クエリはuidが2、5、17、または22のレコードを返します。
BETWEENとNOT BETWEENの使用
BETWEENおよびNOT BETWEEN演算子は、比較する2つの値の配列を受け取ります。
$query->condition('count', [5,10], 'BETWEEN');
この例では、クエリはcountが5〜10のレコードを返します。
IS NULL、IS NOT NULL、EXISTS、およびNOT EXISTSの使用
慣例として、condition()メソッドの代わりに次を使用します:
$query->isNull($field);
$query->isNotNull($field);
$query->exists($field);
$query->notExists($field);
$query->condition($field, NULL, 'IS NOT NULL');のような条件は機能するはずですが、上記の慣例が推奨されます。
その他の演算子
BINARYなどの他の演算子や、使用するデータベースシステム固有の演算子は、動作する場合もあれば、動作しない場合もあります。異なるシステムで使用される可能性のあるモジュールを開発するときは、この点に注意してください。
複数のConditionの使用
クエリをさらにフィルタリングするために、複数のcondition()メソッドを追加できます。
$query->condition('bundle', 'article', '=');
$query->condition('status', 1', '=');
上記の例のように複数のcondition()が存在する場合、レコードがクエリ結果に表示されるには、すべての条件が満たされる必要があります(つまり、条件はANDで結合されます)。
ヒント:OR条件のみのクエリを取得するには、単一のorConditionGroupを使用します。
Conditionグループ
条件グループは、クエリのwhere句で(ORを含む)より複雑な式を作成するために使用できます。条件グループには2つのタイプがあります:
- orConditionGroup - ORで結合された条件のオブジェクトを返します
- andConditionGroup - ANDで結合された条件のオブジェクトを返します
条件グループはオブジェクトを返し、それをクエリの条件として追加できます。
// Create the orConditionGroup
$orGroup = $query->orConditionGroup()
->condition('promoted', 1)
->condition('uid', [2,4,7,22], 'IN');
// Add the group to the query.
$query->condition($orGroup);
この例では、promotedとuidの条件がORでグループ化されてWHEREクエリに追加されます。これにより、次のようなWHEREになります:
WHERE (promoted = 1 OR uid IN (2,4,7,22))
必要に応じて、複数のorConditionGroupおよびandConditionGroupグループを追加できます。より複雑なWHERE句のニーズには、条件グループをネストできます。
次のWHERE句の例が与えられた場合:
WHERE (a = 1 OR b = 1) AND ((c = 1 AND d = 1) OR (e = 1))
クエリの条件は、条件グループを使用して次のように記述できます:
$orGroup1 = $query->orConditionGroup()
->condition('a', 1)
->condition('b', 1);
$andGroup1 = $query->andConditionGroup()
->condition('c', 1)
->condition('d', 1);
$orGroup2 = $query->orConditionGroup()
->condition($andGroup1)
->condition('e', 1);
$query->condition($orGroup1);
$query->condition($orGroup2);