Skip to content

Commit

Permalink
Fix multiple entity join filtering.
Browse files Browse the repository at this point in the history
  • Loading branch information
Romain-Geissler committed May 1, 2012
1 parent 308f0c5 commit f3382cb
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 17 deletions.
4 changes: 2 additions & 2 deletions Builder/DatagridBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,12 @@ public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInter

// set the default field mapping
if (isset($metadata->fieldMappings[$lastPropertyName])) {
$fieldDescription->setFieldMapping($metadata->fieldMappings[$lastPropertyName]);
$fieldDescription->setOption('field_mapping', $fieldDescription->getOption('field_mapping', $metadata->fieldMappings[$lastPropertyName]));
}

// set the default association mapping
if (isset($metadata->associationMappings[$lastPropertyName])) {
$fieldDescription->setAssociationMapping($metadata->associationMappings[$lastPropertyName]);
$fieldDescription->setOption('association_mapping', $fieldDescription->getOption('association_mapping', $metadata->associationMappings[$lastPropertyName]));
}

$fieldDescription->setOption('parent_association_mappings', $fieldDescription->getOption('parent_association_mappings', $parentAssociationMappings));
Expand Down
21 changes: 21 additions & 0 deletions Datagrid/ProxyQuery.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,13 @@ class ProxyQuery implements ProxyQueryInterface

protected $parameterUniqueId;

protected $entityJoinAliases;

public function __construct(QueryBuilder $queryBuilder)
{
$this->queryBuilder = $queryBuilder;
$this->uniqueParameterId = 0;
$this->entityJoinAliases = array();
}

public function execute(array $params = array(), $hydrationMode = null)
Expand Down Expand Up @@ -171,4 +174,22 @@ public function getUniqueParameterId()
{
return $this->uniqueParameterId++;
}

public function entityJoin($associationMappings)
{
$alias = $this->queryBuilder->getRootAlias();
$newAlias = 's';

foreach($associationMappings as $associationMapping){
$newAlias .= '_'.$associationMapping['fieldName'];
if (!in_array($newAlias, $this->entityJoinAliases)) {
$this->entityJoinAliases[] = $newAlias;
$this->queryBuilder->leftJoin(sprintf('%s.%s', $alias, $associationMapping['fieldName']), $newAlias);
}

$alias = $newAlias;
}

return $alias;
}
}
10 changes: 1 addition & 9 deletions Filter/Filter.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,7 @@ public function apply($queryBuilder, $value)

protected function association($queryBuilder, $value)
{
$parentAssociationMappings = $this->getParentAssociationMappings();
$alias = $this->getOption('alias', $queryBuilder->getRootAlias());
$newAlias = 's_'.$alias;

foreach($parentAssociationMappings as $parentAssociationMapping){
$newAlias .= '_'.$parentAssociationMapping['fieldName'];
$queryBuilder->leftJoin(sprintf('%s.%s', $alias, $parentAssociationMapping['fieldName']), $newAlias);
$alias = $newAlias;
}
$alias = $queryBuilder->entityJoin($this->getParentAssociationMappings());

return array($alias, $this->getFieldName());
}
Expand Down
8 changes: 2 additions & 6 deletions Filter/ModelFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,6 @@ protected function handleModel($queryBuilder, $alias, $field, $data)

protected function association($queryBuilder, $data)
{
list($alias, $field) = parent::association($queryBuilder, $data);

$types = array(
ClassMetadataInfo::ONE_TO_ONE,
ClassMetadataInfo::ONE_TO_MANY,
Expand All @@ -86,11 +84,9 @@ protected function association($queryBuilder, $data)
throw new \RunTimeException('Invalid mapping type');
}

$newAlias = $alias.'_'.$field;

$queryBuilder->leftJoin(sprintf('%s.%s', $alias, $field), $newAlias);
$alias = $queryBuilder->entityJoin($this->getParentAssociationMappings() + array($this->getAssociationMapping()));

return array($newAlias, false);
return array($alias, false);
}

public function getDefaultOptions()
Expand Down

0 comments on commit f3382cb

Please sign in to comment.