![Nested OR , AND conditions in drupal query builder](/_gatsby/image/b585fc219ae3514ee307eb4611cf9fd2/4ac234673d886b25cc2f7e3e794c2aa6/druplicon-small.png?u=http%3A%2F%2Fwp.docker.localhost%3A8000%2Fwp-content%2Fuploads%2F2017%2F01%2Fdruplicon-small.png&a=w%3D44%26h%3D50%26fm%3Dpng%26q%3D75&cd=ccfc72b9537c31c95a20eb4772e864c8)
Nested OR , AND conditions in drupal query builder
11 years ago, July 12, 2013
Reading time: 2 mins
Generally in Drupal query builder, we can chain condition() method to add AND conditions to the query we are building.
Which will create a query something like
WHERE Condition1 AND Condition2 AND Condition3
by following code:
<?php
$query
->condition(Condition1)
->condition(Condition2)
->condition(Condition3);
?>
Now If we want OR,
<?php
$query
->condition(
db_or()
->condition(Condition1)
->condition(Condition2)
->condition(Condition3)
);
?>
If we want to nest OR inside AND,
//something like WHERE (Condition1 OR Condition2) AND (Condition3 OR Condition4)
You can do:
<?php
$query
->condition(
db_or()
->condition(Condition1)
->condition(Condition2)
);
$query
->condition(
db_or()
->condition(Condition3)
->condition(Condition4)
);
If we want to nest AND inside OR,
something like
WHERE (Condition1 AND Condition2) OR (Condition3 AND Condition4)
You can do:
<?php
$query
->condition(
db_or()
->condition(
db_and()
->condition(Condition1)
->condition(Condition2)
)
->condition(
db_and()
->condition(Condition3)
->condition(Condition4)
)
);