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

Fat*_*moo 20 php doctrine-orm

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

class User {
    private $id;
    private $name;
    private $username;
}
Run Code Online (Sandbox Code Playgroud)

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

array( 'name' => 'joe', 'username' => 'shmoe' );
Run Code Online (Sandbox Code Playgroud)

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

Some\Unknown\Doctrine\Object::hydrateFromArray($array);
Run Code Online (Sandbox Code Playgroud)

显然创建一个函数来为它提供一个对象是很容易的,但是肯定教义必须有一些内容来实现这个目标吗?

Fat*_*moo 21

弄清楚了.给定一个存储库:

//for odm
$repo->getDocumentManager()->getHydratorFactory()->hydrate($entity, $array);
Run Code Online (Sandbox Code Playgroud)

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

  • 看起来像它的MongoDB? (4认同)
  • 这仅适用于 Doctrine\ODM\MongoDB\Hydrator\HydratorInterface。不适用于所有数据库类型。 (2认同)

HKa*_*lla 5

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

$user = $serializer->deserialize($data, 'Namespace\User', 'json');
Run Code Online (Sandbox Code Playgroud)

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

  • 是什么让您认为 Symfony 序列化程序组件不支持 json?我一直在使用它来反序列化 json,并且总是建议在 jms 上使用 symfony 序列化器组件 - 这部分被放弃了。这是一篇关于 Symfony 序列化器的灵活性的好文章:http://thomas.jarrand.fr/blog/serialization/ (2认同)