From d0c05251d3eb3357f47a11c00b8eecdf23aa4bdf Mon Sep 17 00:00:00 2001 From: Vladislav Vlastovskiy Date: Thu, 12 Jun 2025 14:10:08 +0300 Subject: [PATCH] Uniform memberOf expression builder --- src/Query/QueryExpressionVisitor.php | 8 +++++++- tests/Tests/ORM/Query/QueryExpressionVisitorTest.php | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Query/QueryExpressionVisitor.php b/src/Query/QueryExpressionVisitor.php index 3e0ec655a46..8f13d87d30e 100644 --- a/src/Query/QueryExpressionVisitor.php +++ b/src/Query/QueryExpressionVisitor.php @@ -143,7 +143,13 @@ public function walkComparison(Comparison $comparison): mixed return $this->expr->like($field, $placeholder); case Comparison::MEMBER_OF: - return $this->expr->isMemberOf($comparison->getField(), $comparison->getValue()->getValue()); + if (str_starts_with($comparison->getField(), ':')) { + return $this->expr->isMemberOf($comparison->getField(), $comparison->getValue()->getValue()); + } + + $this->parameters[] = $parameter; + + return $this->expr->isMemberOf($placeholder, $field); case Comparison::STARTS_WITH: $parameter->setValue($parameter->getValue() . '%', $parameter->getType()); diff --git a/tests/Tests/ORM/Query/QueryExpressionVisitorTest.php b/tests/Tests/ORM/Query/QueryExpressionVisitorTest.php index 9ece94b5d2a..24f831569da 100644 --- a/tests/Tests/ORM/Query/QueryExpressionVisitorTest.php +++ b/tests/Tests/ORM/Query/QueryExpressionVisitorTest.php @@ -63,7 +63,9 @@ public static function comparisonData(): array [$cb->notIn('field', ['value']), $qb->notIn('o.field', ':field'), new Parameter('field', ['value'])], [$cb->contains('field', 'value'), $qb->like('o.field', ':field'), new Parameter('field', '%value%')], + [$cb->memberOf(':field', 'o.field'), $qb->isMemberOf(':field', 'o.field')], + [$cb->memberOf('field', 'value'), $qb->isMemberOf(':field', 'o.field'), new Parameter('field', 'value')], [$cb->startsWith('field', 'value'), $qb->like('o.field', ':field'), new Parameter('field', 'value%')], [$cb->endsWith('field', 'value'), $qb->like('o.field', ':field'), new Parameter('field', '%value')],