сериализация сущностей doctrine2

У меня есть следующие лица: Event :hasOne: User :hasHone: Group

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

// build query
$em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');

$query = $em->createQueryBuilder()
->select('evt, usr')
->from('Application\Model\Event', 'evt')
->join('Application\Model\User', 'usr')
->where('evt.userId in (:uid)')
->setParameter('uid', $usersId);

if (null !== $from) {
$query->andWhere('TRUNC(evt.litteralDate) > TO_DATE(:from, \'yyyy-mm-dd\')')
->setParameter('from', $from);
}

if (null !== $to) {
$query->andWhere('TRUNC(evt.litteralDate) < TO_DATE(:to, \'yyyy-mm-dd\')')
->setParameter('to', $to);
}$events = $query->getQuery()->getArrayResult();

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

{
"events": [
{
"id": 1677,
"userId": 2,
"type": "T",
"date": {
"date": "2013-03-05 00:00:00",
"timezone_type": 3,
"timezone": "Europe/Paris"},
"litteralDate": "05-MAR-13",
"piquet": true,
"when": "passe",
"description": "Jour Travaille",
"user" : {
"id" : 2,
"login" : "myUserName",
"name" : "MY user name"}
},
}

0

Решение

Если хотите fetch-join одна сущность внутри другой, вам нужно запросить основную сущность и те, к которым вы хотите присоединиться в предложении select. Читайте здесь о том, как получить-присоединиться в dql.

Прямо сейчас вы ссылаетесь на класс сущности для Application\Model\User в вашем join предложение, вы должны ссылаться на связь между сущностью события и сущностью пользователя.

Допустим, вы находитесь в своем хранилище для вашей сущности события Application\Model\Event (для которого вы используете короткие обозначения evt) и вы хотите присоединиться к организации Application\Model\User который связан с объектом события в свойстве user, Затем вам нужно написать предложение join следующим образом:

$query = $this->createQueryBuilder('evt')
->select('evt', 'usr')
->leftJoin('evt.user', 'usr')

...other parts of the query

->getQuery();

$array = $query->getResult(Query::HYDRATE_ARRAY)

Поскольку вы находитесь в хранилище для Application\Model\Event сущность вам не нужна ваша FROM предложение вообще (вы можете пропустить это), так как по умолчанию создается QueryBuilder будет использовать эту сущность по умолчанию для $this репозиторий.

Еще один совет:

Я думаю, что для получения вашего результата вы должны обратиться к DoctrineObject гидратор.

Вы можете извлекать объекты как по значению, так и по ссылке. Вы можете прочитать о том, как это сделать Вот.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]