private function createAggregateChild(
        Child $meta,
        Str $nodeName,
        MapInterface $data,
        Query $query
    ): Query {
        $relationshipName = $nodeName
            ->append('_')
            ->append($meta->relationship()->property());
        $endNodeName = $relationshipName
            ->append('_')
            ->append($meta->relationship()->childProperty());
        $endNodeProperties = $this->buildProperties(
            $meta->properties(),
            $endNodeParamKey = $endNodeName->append('_props')
        );
        $relationshipProperties = $this->buildProperties(
            $meta->relationship()->properties(),
            $relationshipParamKey = $relationshipName->append('_props')
        );

        return $query
            ->create((string) $nodeName)
            ->linkedTo(
                (string) $endNodeName,
                $meta->labels()->toPrimitive()
            )
            ->withProperties($endNodeProperties->reduce(
                [],
                static function(array $carry, string $property, string $cypher): array {
                    $carry[$property] = $cypher;

                    return $carry;
                }
            ))
            ->withParameter(
                (string) $endNodeParamKey,
                $data
                    ->get($meta->relationship()->childProperty())
                    ->reduce(
                        [],
                        static function(array $carry, string $key, $value): array {
                            $carry[$key] = $value;

                            return $carry;
                        }
                    )
            )
            ->through(
                (string) $meta->relationship()->type(),
                (string) $relationshipName,
                'left'
            )
            ->withProperties($relationshipProperties->reduce(
                [],
                static function(array $carry, string $property, string $cypher): array {
                    $carry[$property] = $cypher;

                    return $carry;
                }
            ))
            ->withParameter(
                (string) $relationshipParamKey,
                $data
                    ->remove($meta->relationship()->childProperty())
                    ->reduce(
                        [],
                        static function(array $carry, string $key, $value): array {
                            $carry[$key] = $value;

                            return $carry;
                        }
                    )
            );
    }
private function createAggregateChild(
        Child $meta,
        Str $nodeName,
        MapInterface $data,
        Query $query
    ): Query {
        $relationshipName = $nodeName
            ->append('_')
            ->append($meta->relationship()->property());
        $endNodeName = $relationshipName
            ->append('_')
            ->append($meta->relationship()->childProperty());
        $endNodeProperties = $this->buildProperties(
            $meta->properties(),
            $endNodeParamKey = $endNodeName->append('_props')
        );
        $relationshipProperties = $this->buildProperties(
            $meta->relationship()->properties(),
            $relationshipParamKey = $relationshipName->append('_props')
        );

        return $query
            ->create((string) $nodeName)
            ->linkedTo(
                (string) $endNodeName,
                $meta->labels()->toPrimitive()
            )
            ->withProperties($endNodeProperties->reduce(
                [],
                static function(array $carry, string $property, string $cypher): array {
                    $carry[$property] = $cypher;

                    return $carry;
                }
            ))
            ->withParameter(
                (string) $endNodeParamKey,
                $data
                    ->get($meta->relationship()->childProperty())
                    ->reduce(
                        [],
                        static function(array $carry, string $key, $value): array {
                            $carry[$key] = $value;

                            return $carry;
                        }
                    )
            )
            ->through(
                (string) $meta->relationship()->type(),
                (string) $relationshipName,
                'left'
            )
            ->withProperties($relationshipProperties->reduce(
                [],
                static function(array $carry, string $property, string $cypher): array {
                    $carry[$property] = $cypher;

                    return $carry;
                }
            ))
            ->withParameter(
                (string) $relationshipParamKey,
                $data
                    ->remove($meta->relationship()->childProperty())
                    ->reduce(
                        [],
                        static function(array $carry, string $key, $value): array {
                            $carry[$key] = $value;

                            return $carry;
                        }
                    )
            );
    }
private function createAggregateChild ( Child $ meta , Str $ nodeName , MapInterface $ data , Query $ query ) : Query { $ relationshipName = $ nodeName -> append ( '_' ) -> append ( $ meta -> relationship ( ) -> property ( ) ) ; $ endNodeName = $ relationshipName -> append ( '_' ) -> append ( $ meta -> relationship ( ) -> childProperty ( ) ) ; $ endNodeProperties = $ this -> buildProperties ( $ meta -> properties ( ) , $ endNodeParamKey = $ endNodeName -> append ( '_props' ) ) ; $ relationshipProperties = $ this -> buildProperties ( $ meta -> relationship ( ) -> properties ( ) , $ relationshipParamKey = $ relationshipName -> append ( '_props' ) ) ; return $ query -> create ( ( string ) $ nodeName ) -> linkedTo ( ( string ) $ endNodeName , $ meta -> labels ( ) -> toPrimitive ( ) ) -> withProperties ( $ endNodeProperties -> reduce ( [ ] , static function ( array $ carry , string $ property , string $ cypher ) : array { $ carry [ $ property ] = $ cypher ; return $ carry ; } ) ) -> withParameter ( ( string ) $ endNodeParamKey , $ data -> get ( $ meta -> relationship ( ) -> childProperty ( ) ) -> reduce ( [ ] , static function ( array $ carry , string $ key , $ value ) : array { $ carry [ $ key ] = $ value ; return $ carry ; } ) ) -> through ( ( string ) $ meta -> relationship ( ) -> type ( ) , ( string ) $ relationshipName , 'left' ) -> withProperties ( $ relationshipProperties -> reduce ( [ ] , static function ( array $ carry , string $ property , string $ cypher ) : array { $ carry [ $ property ] = $ cypher ; return $ carry ; } ) ) -> withParameter ( ( string ) $ relationshipParamKey , $ data -> remove ( $ meta -> relationship ( ) -> childProperty ( ) ) -> reduce ( [ ] , static function ( array $ carry , string $ key , $ value ) : array { $ carry [ $ key ] = $ value ; return $ carry ; } ) ) ; }
Add the cypher clause to build the relationship and the node corresponding
to a child of the aggregate

@param MapInterface<string, mixed> $data
Add the cypher clause to build the relationship and the node corresponding to a child of the aggregate