Doctrine2是否可以使用从数组中创建实体的方法?
我的意思是Doctrine2将数据库返回值转换为对象。包括孩子。
如果有可能,链接和示例将非常有用。谢谢。
答案 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"
}
希望这会有所帮助:)