开发者

Can doctrine2 hydrate a new entity from an array?

开发者 https://www.devze.com 2023-03-14 18:08 出处:网络
I think the title asks it all. Very simple, I have an entity: class User { private $id; private $name; private $username;

I think the title asks it all. Very simple, I have an entity:

class User {
    private $id;
    private $name;
    private $username;
}

with all the appropriate setters and getter. I have an array:

array( 'name' => 'joe', 'username' => 'shmoe' );

and I want to be able to do something like this:

Some\Unknown\Doctrine\Object::hydrateFromArray($array);

Obviously creating a function to hydrate it an 开发者_高级运维object would be easy enough, but surely doctrine must have something build in to accomplish this?


Figured it out. Given a repository:

//for odm
$repo->getDocumentManager()->getHydratorFactory()->hydrate($entity, $array);

I don't know if the same can be done for ORM, but I'm currently using ODM.


You could use the Serializer Component:

$user = $serializer->deserialize($data, 'Namespace\User', 'json');

http://symfony.com/doc/current/components/serializer.html#deserializing-an-object


As with Entities it's up to you to create the setters and getters.

class User
{
    private $id;
    private $name;
    private $username;

    public function fromArray($array)
    {
         // Code to fill the object here.
    }
}

Also there's nothing that says you can't implement it in the constructor either. Remember, Doctrine 2 entities don't inherit anything from a main class unless you do it yourself. It just acts on it.


Thanks to answer of HKandulla, i using symfony component ObjectNormalizer:

$myHydratedObject = (new ObjectNormalizer())->denormalize($array, MyAnyEntity::class);
0

精彩评论

暂无评论...
验证码 换一张
取 消