Skip to content

Commit ebcef38

Browse files
committed
Solution 3: Single JOIN with multiple join conditions
1 parent cc37138 commit ebcef38

File tree

1 file changed

+13
-22
lines changed

1 file changed

+13
-22
lines changed

eZ/Publish/Core/Persistence/Legacy/Filter/CriterionQueryBuilder/Content/ObjectStateIdQueryBuilder.php

+13-22
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace eZ\Publish\Core\Persistence\Legacy\Filter\CriterionQueryBuilder\Content;
1010

11-
use Doctrine\DBAL\ParameterType;
11+
use Doctrine\DBAL\Connection;
1212
use eZ\Publish\API\Repository\Values\Content\Query\Criterion\ObjectStateId;
1313
use eZ\Publish\Core\Persistence\Legacy\Content\ObjectState\Gateway;
1414
use eZ\Publish\SPI\Persistence\Filter\Doctrine\FilteringQueryBuilder;
@@ -25,42 +25,33 @@ public function accepts(FilteringCriterion $criterion): bool
2525
return $criterion instanceof ObjectStateId;
2626
}
2727

28+
29+
/**
30+
* @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion\ObjectStateId $criterion
31+
*/
2832
public function buildQueryConstraint(
2933
FilteringQueryBuilder $queryBuilder,
3034
FilteringCriterion $criterion
3135
): ?string {
3236
$value = (array)$criterion->value;
3337

34-
$conditions = [];
35-
foreach ($value as $objectStateId) {
36-
$conditions[] = $queryBuilder->expr()->eq(
37-
'osl.contentobject_state_id',
38-
$queryBuilder->createNamedParameter($objectStateId, ParameterType::INTEGER)
39-
);
40-
}
41-
42-
var_dump(
43-
__METHOD__,
44-
$value,
45-
(string) $queryBuilder->expr()->and(
46-
$queryBuilder->expr()->eq('content.id', 'osl.contentobject_id'),
47-
$queryBuilder->expr()->and(...$conditions),
48-
)
49-
);
50-
51-
/** @var \eZ\Publish\API\Repository\Values\Content\Query\Criterion\ObjectStateId $criterion */
5238
$queryBuilder
53-
->join(
39+
->joinOnce(
5440
'content',
5541
Gateway::OBJECT_STATE_LINK_TABLE,
5642
'osl',
5743
(string) $queryBuilder->expr()->and(
5844
$queryBuilder->expr()->eq('content.id', 'osl.contentobject_id'),
59-
$queryBuilder->expr()->or(...$conditions),
60-
),
45+
$queryBuilder->expr()->in(
46+
'osl.contentobject_state_id',
47+
$queryBuilder->createNamedParameter($value, Connection::PARAM_INT_ARRAY)
48+
)
49+
)
6150
);
6251

6352

53+
54+
6455
return $queryBuilder->expr()->isNotNull(
6556
'osl.contentobject_state_id',
6657
);

0 commit comments

Comments
 (0)