Может ли doctrine2 гидрировать новую сущность из массива? - PullRequest
17 голосов
/ 22 июня 2011

Я думаю, что название спрашивает все это.Очень просто, у меня есть сущность:

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

со всеми соответствующими установщиками и получателями.У меня есть массив:

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

, и я хочу иметь возможность сделать что-то вроде этого:

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

Очевидно, что создать функцию для гидратации объекта будет достаточно легко, нонеужели в доктрине должно быть что-то встроенное, чтобы достичь этого?

Ответы [ 3 ]

20 голосов
/ 22 июня 2011

Разобрался.С учетом хранилища:

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

Я не знаю, можно ли сделать то же самое для ORM, но в настоящее время я использую ODM.

4 голосов
/ 28 марта 2016

Вы можете использовать компонент сериализатора:

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

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

4 голосов
/ 22 июня 2011

Как и в случае с сущностями, вам нужно создавать и устанавливать сеттеры.

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

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

Также нет ничего, что говорило бы, что вы не можете реализовать это в конструкторе. Помните, сущности Doctrine 2 не наследуют ничего от основного класса, если вы сами этого не сделаете. Это просто действует на него.

...