/** * Build new instance from an eloquent model object. * * @param \Illuminate\Database\Eloquent\Model $eloquentModel * @return \ProAI\Datamapper\Support\Entity */ public static function newFromEloquentObject(EloquentModel $eloquentModel) { $rc = new ReflectionClass(static::class); $entity = $rc->newInstanceWithoutConstructor(); // get model data $dict = ['mapping' => $eloquentModel->getMapping(), 'attributes' => $eloquentModel->getAttributes(), 'relations' => $eloquentModel->getRelations()]; // attributes foreach ($dict['mapping']['attributes'] as $attribute => $column) { $entity->{$attribute} = $dict['attributes'][$column]; } // embeddeds foreach ($dict['mapping']['embeddeds'] as $name => $embedded) { $entity->{$name} = $embedded['class']::newFromEloquentObject($eloquentModel, $name); } // relations foreach ($dict['mapping']['relations'] as $name => $relation) { // set relation object if (!empty($dict['relations'][$name])) { $relationObject = $dict['relations'][$name]->toDatamapperObject(); } elseif (in_array($relation['type'], $eloquentModel->manyRelations)) { $relationObject = new ProxyCollection(); } else { $relationObject = new Proxy(); } $entity->{$name} = $relationObject; } return $entity; }