【问题标题】:ZF2 Doctrine HydratationZF2 学说水合
【发布时间】:2015-06-28 15:49:50
【问题描述】:

当我查询一个表时,例如:

$query  = $this->entityManager->createQueryBuilder();
$query->select('TaPost')->from("Application\Entity\TaPost", 'TaPost'); 
return $query->getQuery()->getResult()
)

我得到一个对象数组“Tapost”。

是否有一种简单的方法(并且不会破坏性能)来获取给定新类的数组?等价于zend/db/sql:

new HydratingResultSet(new \Zend\Stdlib\Hydrator\ClassMethods(), new myNewClass())

【问题讨论】:

    标签: php doctrine-orm zend-framework2


    【解决方案1】:

    你想直接得到数组结果吗?有两种方式。你得到一个实体对象,它是\Application\Entity\TaPost。您可以像这样为您的实体创建一个方法

    class TaPost {
        // Your entity attributes and methods
        // ...
    
        public function toArray()
        {
            return array(
                    "id" => $this->getId(),
                    "title" => $this->getTitle(),
                    "description" => $this->getDescription(),
                    // ...
                );
        }
    }
    

    在你的 for 循环中使用它们。

    另一个解决方案是,你可以使用 Doctrine HYDRATE_ARRAY

    $results = $query->getQuery()->getResult( Doctrine\ORM\Query::HYDRATE_ARRAY );
    

    【讨论】:

    • 感谢您的回答,但这并不是我的目标。
    【解决方案2】:

    尝试使用教条 hydrator 而不是 zend hydrator。

    $model = new \Blog\Model\Post();
    $hydrator = new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($this->getEntityManager(), 'Blog\Model\Post');
    $model = $hydrator->hydrate($array, $model);
    

    【讨论】:

      【解决方案3】:

      感谢您的回答,但这不完全是我的目标。 我正在尝试做tutorial,而不是zend-db-sql,我正在使用Doctrine。

      我有一个方法findAll(),它必须根据自定义模型(帖子)从PostInterface 类中返回一个对象数组。 使用 Doctrine,我得到一个 TaPost 数组(TaPost 是 Doctrine 的一个实体),但我需要返回一个 Post 数组。

      我如何告诉 Doctrine 自动补水 Post 而不是 TaPost ?我是否需要对我的学说结果进行 foreach 并逐个发布一个对象?

      ps:使用 zned-sql,他们会在得到结果时这样做:

      $resultSet = new HydratingResultSet(new \Zend\Stdlib\Hydrator\ClassMethods(), new \Blog\Model\Post());
      
      return $resultSet->initialize($result);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-17
        • 2013-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-02
        • 2013-02-04
        相关资源
        最近更新 更多