2011-06-22 32 views
12

我认为标题会问这一切。很简单,我有一个实体:Doctrine2可以从数组中提供一个新实体吗?

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

与所有适当的setter和getter。我有一个数组:

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

,我希望能够做这样的事情:

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

显然,创建一个函数来滋润它的对象将是很容易,但肯定主义必须有内置的东西来实现这一目标?

回答

17

想通了。 给定资料库:

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

我不知道是否同样可以为ORM做,但我目前使用ODM。

+4

看起来像它的MongoDB? – nvvetal

+0

这仅适用于Doctrine \ ODM \ MongoDB \ Hydrator \ HydratorInterface。不适用于所有数据库类型。 –

3

与实体一样,您需要创建setters和getters。

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

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

也没有什么说你不能在构造函数中实现它。请记住,Doctrine 2实体不会从主类继承任何东西,除非您自己做。它只是作用于它。

+1

,如果你在你的实体的关系是什么?你如何在你的实体中注入EM? (为了获得相关的对象/对象,你将需要EM) – thexpand

3

您可以使用串行组件:

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

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

+0

symfony序列化组件不支持json的反序列化。但是,JMS序列化器的确如此。 –

+0

是什么让你认为Symfony序列化程序组件不支持json?我一直在使用它反序列化json,并且总是推荐使用symfony序列化程序组件对jms进行部分放弃。 Symfony序列化程序的灵活性如下:http://thomas.jarrand.fr/blog/serialization/ – HKandulla

相关问题