学说2实体保湿剂

时间:2014-09-01 09:05:00

标签: php doctrine-orm entity

是否可以像在学说查询之后一样水合实体数据

$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();

1 个答案:

答案 0 :(得分:1)

我担心没有内置的学说功能。您应该创建自己的序列化程序或使用现有的序列化程序:JMS Serializer,Symfony Serializer。

您也可以创建自己的序列化程序。示例代码可以在Doctrine2 export entity to array找到,但有人提到它不是最好的方法。