Как объединить сущности, выбрав только нужные поля и сохранить вложенность?

Есть запрос вида:

$qb = $this->createQueryBuilder("p")
				->addSelect(array("u","c", "cu"))
				->leftJoin("p.user", "u")
				->leftJoin("p.comments", "c")
				->leftJoin("c.user", "cu")
				->where("p.id = :id");
		$qb->setParameter("id",$id);
		$query = $qb->getQuery();
		return $query->getSingleResult(Query::HYDRATE_ARRAY);


В результате которого имеем массив вида:

Array(
	'result' => Array (
				"id" => "111",
				"title" => "no title",
				"user" => Array( "id" => "1", "email" => "1111" )
				"comments" => Array ( "id" => "1", "text" => "aaaa", "user" => Array("id" => "1"));
			)
);


Так вот, если делать как выше, то попадают в выборку все поля сущностей, что не всегда правильно.

А если делать так:

$qb = $this->createQueryBuilder("p")
				->addSelect(array("u.id","c", "cu"))
				->leftJoin("p.user", "u")
				->leftJoin("p.comments", "c")
				->leftJoin("c.user", "cu")
				->where("p.id = :id");
		$qb->setParameter("id",$id);
		$query = $qb->getQuery();
		return $query->getSingleResult(Query::HYDRATE_ARRAY);


То результат запроса будет совсем другим:

Array(
	'result' => Array (
				0 => Array(
						"id" => "111",
						"title" => "no title",
						"comments" => Array ( "id" => "1", "text" => "aaaa", "user" => Array("id" => "1"))
						),
				"id" => "1"
			)
);


Как грамотно составить запрос на доктрине чтобы выбирать только нужные поля, при этом сохранить структуру вложенности?
  • Вопрос задан
  • 3058 просмотров
Решения вопроса 1
@Tashiro Автор вопроса
разобрался
нужно использовать такой синтаксис
->addSelect(array("partial u.{id,name}","c", "cu"))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы