Neos\ContentRepository\Domain\Repository\NodeDataRepository::findNodesByRelatedEntities PHP Method

findNodesByRelatedEntities() public method

Will return all possible NodeData objects that contain this identifiers. Note: This is an internal method that is likely to be replaced in the future. $objectTypeMap = array( 'Neos\Media\Domain\Model\Asset' => array('some-uuid-here'), 'Neos\Media\Domain\Model\ImageVariant' => array('some-uuid-here', 'another-uuid-here') )
public findNodesByRelatedEntities ( array $relationMap ) : array
$relationMap array
return array
    public function findNodesByRelatedEntities($relationMap)
    {
        /** @var QueryBuilder $queryBuilder */
        $queryBuilder = $this->entityManager->createQueryBuilder();
        $queryBuilder->select('n')->from(NodeData::class, 'n');
        $constraints = [];
        $parameters = [];
        foreach ($relationMap as $relatedObjectType => $relatedIdentifiers) {
            foreach ($relatedIdentifiers as $relatedIdentifier) {
                $constraints[] = '(LOWER(NEOSCR_TOSTRING(n.properties)) LIKE :entity' . md5($relatedIdentifier) . ' )';
                $parameters['entity' . md5($relatedIdentifier)] = '%"__identifier": "' . strtolower($relatedIdentifier) . '"%';
            }
        }
        $queryBuilder->where(implode(' OR ', $constraints));
        $queryBuilder->setParameters($parameters);
        $possibleNodeData = $queryBuilder->getQuery()->getResult();
        return $possibleNodeData;
    }

Usage Example

 /**
  * Removes unused ImageVariants after a Node property changes to a different ImageVariant.
  * This is triggered via the nodePropertyChanged event.
  *
  * Note: This method it triggered by the "nodePropertyChanged" signal, @see \Neos\ContentRepository\Domain\Model\Node::emitNodePropertyChanged()
  *
  * @param NodeInterface $node the affected node
  * @param string $propertyName name of the property that has been changed/added
  * @param mixed $oldValue the property value before it was changed or NULL if the property is new
  * @param mixed $value the new property value
  * @return void
  */
 public function removeUnusedImageVariant(NodeInterface $node, $propertyName, $oldValue, $value)
 {
     if ($oldValue === $value || !$oldValue instanceof ImageVariant) {
         return;
     }
     $identifier = $this->persistenceManager->getIdentifierByObject($oldValue);
     $results = $this->nodeDataRepository->findNodesByRelatedEntities(array(ImageVariant::class => [$identifier]));
     // This case shouldn't happen as the query will usually find at least the node that triggered this call, still if there is no relation we can remove the ImageVariant.
     if ($results === []) {
         $this->assetRepository->remove($oldValue);
         return;
     }
     // If the result contains exactly the node that got a new ImageVariant assigned then we are safe to remove the asset here.
     if ($results === [$node->getNodeData()]) {
         $this->assetRepository->remove($oldValue);
     }
 }
All Usage Examples Of Neos\ContentRepository\Domain\Repository\NodeDataRepository::findNodesByRelatedEntities