У меня есть следующие лица: 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"}
},
}
Если хотите 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
гидратор.
Вы можете извлекать объекты как по значению, так и по ссылке. Вы можете прочитать о том, как это сделать Вот.
Других решений пока нет …