2011-08-31 2 views
18

У меня есть простой объект, который является таблицей, содержащей мои пользовательские данные , и я хочу получить все столбцы конкретного пользователя в виде массива, а затем json_encode, но то, что я получаю, является объектом сущности, который мне придется использовать метод get для каждого значения. Мне просто нужен ассоциативный массив значений моей пользовательской таблицы. коды я пытался и не работать (возвращаемый объект сущности) являются следующие: 1.Как получить объект результата Doctrine2 как ассоциативный массив?

$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 проекта, который doctrine2 интеграции Zend.

ответ

33

Когда вы делаете $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() 
    ); 
} 

Гидратация API Docs: http://www.doctrine-project.org/api/orm/2.1/namespace-Doctrine.ORM.Internal.Hydration.html

+3

Спасибо за быстрые и точные константы reply.The для различных режимов гидратации являются: Query :: HYDRATE_OBJECT Query :: HYDRATE_ARRAY Query :: HYDRATE_SCALAR Query :: HYDRATE_SINGLE_SCALAR –

+0

Что делать, если я хочу использовать как '$ this-> doctrine-> em-> find ('Entity \ User', 5)'? – Rorschach

+0

Это моя проблема, http://stackoverflow.com/questions/25158549/doctrine-entity-object-to-array – Rorschach

21

You можно также использовать getArrayResult() в качестве ярлыка для прохождения в константу, чтобы получить массив обратно:

$accounts = $qb->getQuery()->getArrayResult(); 
6

Вы должны нам е константа, содержащее значение 2, и это встроенное, вы можете сделать это, как это в конце части вашего запроса

$qb->getQuery()->getResult(Doctrine\ORM\Query::HYDRATE_ARRAY); 
1
$data = $this->entity->findOneBy(array('key' => $value)); 

$hydrator = new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($this->_em, $entity_name); 

$array = $hydrator->extract($data); 
+0

Это не ответ на вопрос. – Mogsdad

Смежные вопросы