commit a7ace8f4631e287b4d7553b57ef8e7eb944d5e6a
parent a5d0163b706ee93bf19cb0dd09647d9af046e78a
Author: Felicitus <felicitus@felicitus.org>
Date: Fri, 17 Jul 2015 00:26:14 +0200
Support filtering by IRI for the root associations
Diffstat:
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php b/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php
@@ -103,8 +103,12 @@ class AdvancedSearchFilter extends AbstractFilter
);
} else {
- // Pull in associations
- $this->addJoins($queryBuilder, $filter);
+ if ($filter["association"] !== null) {
+ // Pull in associations
+ $this->addJoins($queryBuilder, $filter);
+ } else {
+ $filter["value"] = $this->getFilterValueFromUrl($filter["value"]);
+ }
$queryBuilder->andWhere(
$this->getFilterExpression($queryBuilder, $filter)
@@ -114,6 +118,26 @@ class AdvancedSearchFilter extends AbstractFilter
}
/**
+ * Gets the ID from an URI or a raw ID.
+ *
+ * @param string $value
+ *
+ * @return string
+ */
+ private function getFilterValueFromUrl($value)
+ {
+ try {
+ if ($item = $this->iriConverter->getItemFromIri($value)) {
+ return $this->propertyAccessor->getValue($item, 'id');
+ }
+ } catch (\InvalidArgumentException $e) {
+ // Do nothing, return the raw value
+ }
+
+ return $value;
+ }
+
+ /**
* Adds all required joins to the queryBuilder.
*
* @param QueryBuilder $queryBuilder