我有一个简单的实体,它是一个包含我的用户数据的表 我想将特定用户的所有列作为数组获取,然后json_encode它们但我得到的是一个实体对象,我必须为每个值使用get方法。我只想要一个用户表值的关联数组。 我尝试过但不起作用的代码(返回的实体对象)如下: 1。
$qb = $this->em->createQueryBuilder();
$qb->add('select', 'a')
->add('from', 'Entities\Adminprofile a')
->add('where', 'a.userid = 3333');
$accounts = $qb->getQuery()->getResult();
2
$account = $this->em->getRepository('Entities\Adminprofile')->findOneBy(
array('userid' => '3333'));
PS:我正在使用z2d2 Project,这是doctrine2集成到Zend框架中。
答案 0 :(得分:36)
当您执行$accounts = $qb->getQuery()->getResult();
时,传递给getResult的参数告诉它如何水合将返回的结果集。
阵容保湿
如果你想要数组,那么你应该传递CONSTANT
数组水合Doctrine\ORM\Query::HYDRATE_ARRAY
。
$ accounts = $ qb-> getQuery() - > getResult(Doctrine \ ORM \ Query :: HYDRATE_ARRAY);
如果您使用findOneBy()
,则始终将返回实体。由于查找工作的内部结构,除了返回实体之外,您无法通过任何其他方式告诉它进行水合作用。
在这种情况下,您需要做的是在实体内部创建一个getValues()
方法,该方法返回实体的数组,如下所示:
public function getSimpleValues(){
return array(
'id' => $this->getId(),
'lft' => $this->getLft(),
'rgt' => $this->getRgt(),
'name' => $this->getName(),
'md5Name' => $this->getMd5Name(),
'owner' => $this->getOwner()->getId(),
'etag' => $this->getEtag()
);
}
Hydration API文档:http://www.doctrine-project.org/api/orm/2.1/namespace-Doctrine.ORM.Internal.Hydration.html
答案 1 :(得分:23)
您还可以使用getArrayResult()作为传递常量以获取数组的快捷方式:
$accounts = $qb->getQuery()->getArrayResult();
答案 2 :(得分:7)
你应该使用包含值2的常量并且它是内置的,你可以在查询的结尾处这样做
$qb->getQuery()->getResult( Doctrine\ORM\Query::HYDRATE_ARRAY );
答案 3 :(得分:1)
$data = $this->entity->findOneBy(array('key' => $value));
$hydrator = new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($this->_em, $entity_name);
$array = $hydrator->extract($data);