Подтвердить что ты не робот

Как получить объект результата Doctrine2 как ассоциативный массив?

У меня есть простой объект, который является таблицей, содержащей мои пользовательские данные и я хочу получить все столбцы конкретного пользователя в виде массива, а затем 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: im, используя z2d2 Project, который является интеграцией doctrine2 в рамках Zend.

4b9b3361

Ответ 1

Когда вы выполняете $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

Ответ 2

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

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

Ответ 3

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

$qb->getQuery()->getResult( Doctrine\ORM\Query::HYDRATE_ARRAY );

Ответ 4

$data = $this->entity->findOneBy(array('key' => $value));

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

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