Neos\Flow\Security\Authorization\Privilege\Entity\Doctrine\PropertyConditionGenerator::getSqlForManyToOneAndOneToOneRelationsWithPropertyPath PHP Method

getSqlForManyToOneAndOneToOneRelationsWithPropertyPath() protected method

protected getSqlForManyToOneAndOneToOneRelationsWithPropertyPath ( Doctrine\ORM\Query\Filter\SQLFilter $sqlFilter, Doctrine\ORM\Mapping\QuoteStrategy $quoteStrategy, Doctrine\Common\Persistence\Mapping\ClassMetadata $targetEntity, string $targetTableAlias, string $targetEntityPropertyName ) : string
$sqlFilter Doctrine\ORM\Query\Filter\SQLFilter
$quoteStrategy Doctrine\ORM\Mapping\QuoteStrategy
$targetEntity Doctrine\Common\Persistence\Mapping\ClassMetadata
$targetTableAlias string
$targetEntityPropertyName string
return string
    protected function getSqlForManyToOneAndOneToOneRelationsWithPropertyPath(DoctrineSqlFilter $sqlFilter, QuoteStrategy $quoteStrategy, ClassMetadata $targetEntity, $targetTableAlias, $targetEntityPropertyName)
    {
        $subselectQuery = $this->getSubselectQuery($targetEntity, $targetEntityPropertyName);
        $associationMapping = $targetEntity->getAssociationMapping($targetEntityPropertyName);
        $subselectConstraintQueries = [];
        foreach ($associationMapping['joinColumns'] as $joinColumn) {
            $rootAliases = $subselectQuery->getQueryBuilder()->getRootAliases();
            $subselectQuery->getQueryBuilder()->select($rootAliases[0] . '.' . $targetEntity->getFieldForColumn($joinColumn['referencedColumnName']));
            $subselectSql = $subselectQuery->getSql();
            foreach ($subselectQuery->getParameters() as $parameter) {
                $parameterValue = $parameter->getValue();
                if (is_object($parameterValue)) {
                    $parameterValue = $this->persistenceManager->getIdentifierByObject($parameter->getValue());
                }
                $subselectSql = preg_replace('/\\?/', $this->entityManager->getConnection()->quote($parameterValue, $parameter->getType()), $subselectSql, 1);
            }
            $quotedColumnName = $quoteStrategy->getJoinColumnName($joinColumn, $targetEntity, $this->entityManager->getConnection()->getDatabasePlatform());
            $subselectIdentifier = 'subselect' . md5($subselectSql);
            $subselectConstraintQueries[] = $targetTableAlias . '.' . $quotedColumnName . ' IN (SELECT ' . $subselectIdentifier . '.' . $joinColumn['referencedColumnName'] . '_0 FROM (' . $subselectSql . ') AS ' . $subselectIdentifier . ' ) ';
        }
        return ' (' . implode(' ) AND ( ', $subselectConstraintQueries) . ') ';
    }