使用Doctrine2从数组到对象的水合

时间:2014-04-11 11:40:50

标签: symfony orm doctrine-orm

鉴于我有一个包含标量值的数组(我相信),我如何将它们转换为教义实体?

例如:

array(
    array("name" => "Alex", "id" => 1)
    array("name" => "Chris", "id" => 2)
)

到一组用户实体。

3 个答案:

答案 0 :(得分:2)

使用Serializer组件将是一个干净的方法:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="4dp">

    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="4dp"
        android:layout_gravity="center"
        android:indeterminate="true"/>

</FrameLayout>

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

答案 1 :(得分:1)

我知道的唯一方法是做这样的事情:

// loop over the array
foreach ($users as $user) {
    // new entity
    $post = new User();

    // now loop over the properties of each post array...
    foreach ($user as $property => $value) {
        $method = sprintf('set%s', ucwords($property));
        // use the method as a variable variable to set your value
        $post->$method($value);
    }

    // persist the entity
    $em->persist($post);
}

答案 2 :(得分:0)

即使这是一个非常老的问题,我也想添加另一种方法:Symfony附带了一个PropertyAccessor类,该类有助于确定给定对象的getter和setter函数。 ucwords是找到它们的许多方法之一,并且此访问器类试图找到所有可能性。使用它,poxama的代码可能如下所示:

$propertyAccessor = PropertyAccess::createPropertyAccessor();

// loop over the array
foreach ($users as $user) {
    // new entity
    $post = new User();

    // now loop over the properties of each post array...
    foreach ($user as $property => $value) {
        try {
            $propertyAccessor->setValue($user, $property, $value);
        } catch (NoSuchPropertyException $ex) {
            // go on
        }
    }

    // persist the entity
    $em->persist($post);
}