是否可以像在学说查询之后一样水合实体数据
$entityData = $this->entityService->find($id)->getArrayResult();
如果您已经拥有实体
,请执行此操作$entity = $this->entityService->find($id)->getOneOrNullResult();
$entityData = $SomeDoctrineService->entityToArray($entity);
解决方案
首先你可以使用\ DoctrineModule \ Stdlib \ Hydrator \ DoctrineObject
$hydrator = DoctrineObject(
$entityManager,
get_class($entity)
);
$entityData = $hydrator->extract($entity);
其次我添加了自定义保湿特性EntityDataTrait
use Doctrine\ORM\Proxy\Proxy;
trait EntityDataTrait
{
/**
* @return array
*/
public function toArray()
{
$data = get_object_vars($this);
if ($this instanceof Proxy) {
$originClassName = get_parent_class($this);
foreach ($data as $key => $value) {
if (!property_exists($originClassName, $key)) {
unset ($data[$key]);
}
}
}
foreach ($data as $key => $value) {
if (method_exists($this, 'get' . ucfirst($key))) {
$data[$key] = $this->{'get' . ucfirst($key)}();
}
}
return $data;
}
}
例如
class MyEntity {
use EntityDataTrait;
/*properties and methods below*/
}
$entity = new MyEntity();
$entityData = $entity->toArray();
答案 0 :(得分:1)
我担心没有内置的学说功能。您应该创建自己的序列化程序或使用现有的序列化程序:JMS Serializer,Symfony Serializer。
您也可以创建自己的序列化程序。示例代码可以在Doctrine2 export entity to array找到,但有人提到它不是最好的方法。