doctrine2可以从阵列中为一个新实体加水吗?

时间:2011-06-22 00:58:47

标签: php doctrine-orm

我认为标题要求一切。很简单,我有一个实体:

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

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

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

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

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

显然创造一个能够将物体水合成一个物体的功能就足够了,但是,学说必须要有一些东西才能实现这个目标吗?

3 个答案:

答案 0 :(得分:20)

想出来。 给定一个存储库:

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

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

答案 1 :(得分:4)

与实体一样,由你来创建setter和getter。

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

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

此外,没有任何内容表明您无法在构造函数中实现它。请记住,除非您自己执行,否则Doctrine 2实体不会从主类继承任何内容。它只是对它起作用。

答案 2 :(得分:4)

您可以使用序列化程序组件:

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

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