diff --git a/core/lib/Drupal/Core/Entity/Query/Sql/Condition.php b/core/lib/Drupal/Core/Entity/Query/Sql/Condition.php index 22b91230681..3e71e565d01 100644 --- a/core/lib/Drupal/Core/Entity/Query/Sql/Condition.php +++ b/core/lib/Drupal/Core/Entity/Query/Sql/Condition.php @@ -43,7 +43,7 @@ class Condition extends ConditionBase { // Add the SQL query to the object before calling this method again. $sql_condition->sqlQuery = $sql_query; $condition['field']->compile($sql_condition); - $sql_query->condition($sql_condition); + $conditionContainer->condition($sql_condition); } else { $type = strtoupper($this->conjunction) == 'OR' || $condition['operator'] == 'IS NULL' ? 'LEFT' : 'INNER'; diff --git a/core/modules/system/src/Tests/Entity/EntityQueryTest.php b/core/modules/system/src/Tests/Entity/EntityQueryTest.php index 6efc67a916b..e5d738ff924 100644 --- a/core/modules/system/src/Tests/Entity/EntityQueryTest.php +++ b/core/modules/system/src/Tests/Entity/EntityQueryTest.php @@ -40,6 +40,13 @@ class EntityQueryTest extends EntityUnitTestBase { */ protected $factory; + /** + * A list of bundle machine names created for this test. + * + * @var string[] + */ + protected $bundles; + /** * Field name for the greetings field. * @@ -133,6 +140,7 @@ class EntityQueryTest extends EntityUnitTestBase { } $entity->save(); } + $this->bundles = $bundles; $this->figures = $figures; $this->greetings = $greetings; $this->factory = \Drupal::service('entity.query'); @@ -480,6 +488,34 @@ class EntityQueryTest extends EntityUnitTestBase { $this->assertFalse($count); } + /** + * Tests that nested condition groups work as expected. + */ + public function testNestedConditionGroups() { + // Query for all entities of the first bundle that have either a red + // triangle as a figure or the Turkish greeting as a greeting. + $query = $this->factory->get('entity_test_mulrev'); + + $first_and = $query->andConditionGroup() + ->condition($this->figures . '.color', 'red') + ->condition($this->figures . '.shape', 'triangle'); + $second_and = $query->andConditionGroup() + ->condition($this->greetings . '.value', 'merhaba') + ->condition($this->greetings . '.format', 'format-tr'); + + $or = $query->orConditionGroup() + ->condition($first_and) + ->condition($second_and); + + $this->queryResults = $query + ->condition($or) + ->condition('type', reset($this->bundles)) + ->sort('id') + ->execute(); + + $this->assertResult(6, 14); + } + protected function assertResult() { $assert = array(); $expected = func_get_args();