Cake\ElasticSearch\Marshaller::mergeNested PHP Method

mergeNested() protected method

Merge an embedded document.
protected mergeNested ( Embedded $embed, Document | array $existing, array $data ) : array | Document
$embed Cake\ElasticSearch\Association\Embedded The embed definition.
$existing Document | array The existing entity or entities.
$data array The data to marshal
return array | Document Either a document or an array of documents.
    protected function mergeNested(Embedded $embed, $existing, array $data)
    {
        $class = $embed->entityClass();
        if ($embed->type() === Embedded::ONE_TO_ONE) {
            if (!$existing instanceof EntityInterface) {
                $existing = new $class();
            }
            $existing->set($data);
            return $existing;
        }
        if ($embed->type() === Embedded::ONE_TO_MANY) {
            foreach ($existing as $i => $row) {
                if (isset($data[$i])) {
                    $row->set($data[$i]);
                }
                unset($data[$i]);
            }
            foreach ($data as $row) {
                if (is_array($row)) {
                    $new = new $class();
                    $new->set($row);
                    $existing[] = $new;
                }
            }
            return $existing;
        }
    }