Doctrine2:从数组构建对象

时间:2015-05-26 20:27:56

标签: php doctrine-orm

Doctrine2是否可以使用从数组中创建实体的方法?

我的意思是Doctrine2将数据库返回值转换为对象。包括孩子。

如果有可能,链接和示例将非常有用。谢谢。

1 个答案:

答案 0 :(得分:1)

Doctrine的DBAL和ORM层只是PDO的抽象。将PDO::FETCH_CLASS指定为fetch_argument时,PDOStatement::fetchAll()方法会将返回的结果集提取到指定的类中。

有关详细信息,请参阅文档中的Example #4 Instantiating a class for each result

我认为这就是Doctrine2在幕后所做的事情,因此它是一个PDO功能,而不是Doctrine2功能。

正如Cerad在上面的评论中指出的那样,由于Doctrine2实体只是POPO,您可能必须创建工厂,将数据传递到构造函数或其他方法以从数组中填充您的实体。

我过去曾做过类似的事情:

<?php

class State
{
    private $name;

    private $abbreviation;

    public function fromArray(array $data)
    {
        foreach ($data as $prop => $value) {
            if (!property_exists($this, $prop)) {
                throw new UnexpectedValueException(
                    sprintf('Property %s does not exist in State', $prop)
                );
            }

            $this->{$prop} = $value;
        }
    }
}

$state = new State();
$state->fromArray([
    'name' => 'Arizona',
    'abbreviation' => 'AZ',
]);

var_dump($state);

这会产生:

object(State)#1 (2) {
  ["name":"State":private]=>
  string(7) "Arizona"
  ["abbreviation":"State":private]=>
  string(2) "AZ"
}

希望这会有所帮助:)