GraphAware\Neo4j\OGM\Finder\RelationshipEntityFinder::buildStatement PHP Method

buildStatement() public method

public buildStatement ( $fromId, $direction, $type, $identifier )
    public function buildStatement($fromId, $direction, $type, $identifier)
    {
        $type = $this->relationshipEntityMetadata->getType();
        $identifier = 'rel_' . $this->relationshipMetadata->getPropertyName() . '_' . $this->relationshipEntityMetadata->getType();
        switch ($direction) {
            case 'INCOMING':
                $pattern = '<-[%s:%s]-';
                break;
            case 'OUTGOING':
                $pattern = '-[%s:%s]->';
                break;
            case 'BOTH':
                $pattern = '-[%s:%s]->';
                break;
            default:
                throw new \LogicException(sprintf('Unsupported relationship direction "%s"', $direction));
        }
        $relationshipPattern = sprintf($pattern, $identifier, $type);
        $query = 'MATCH (start) WHERE id(start) = {id}
        MATCH (start)' . $relationshipPattern . '(end)';
        if ($this->relationshipMetadata->hasOrderBy()) {
            $orderProperty = $this->relationshipMetadata->getOrderByPropery();
            $split = explode('.', $orderProperty);
            $reMetadata = $this->relationshipEntityMetadata;
            if (count($split) > 1) {
                $reName = $split[0];
                $v = $split[1];
                if ($reMetadata->getStartNodePropertyName() === $reName || $reMetadata->getEndNodePropertyName() === $reName) {
                    $orderProperty = $this->relationshipMetadata->getPropertyName() . '.' . $v;
                }
            } else {
                if (null !== $reMetadata->getPropertyMetadata($this->relationshipMetadata->getOrderByPropery())) {
                    $orderProperty = $identifier . '.' . $this->relationshipMetadata->getOrderByPropery();
                }
            }
            $query .= ' WITH end, ' . $identifier . ' ORDER BY ' . $orderProperty . ' ' . $this->relationshipMetadata->getOrder();
        }
        $query .= ' RETURN CASE count(' . $identifier . ') WHEN 0 THEN [] ELSE collect({start:startNode(' . $identifier . '), end:endNode(' . $identifier . '), rel:' . $identifier . '}) END AS ' . $identifier;
        //print_r($query);
        return Statement::create($query, ['id' => $fromId]);
    }