Используйте политику исключения JMS.
Пример использования аннотаций к объекту категории, где вы не хотите включать дочерние объекты и объекты, связанные с продуктом:
use ...
JMS\SerializerBundle\Annotation\ExclusionPolicy,
JMS\SerializerBundle\Annotation\Exclude,
...;
/**
* ...
* @ExclusionPolicy("none")
*/
class Category
{
/**
* ...
* @Exclude
*/
private $children;
/**
* ...
* @Exclude
*/
private $products;
}
Дополнительные сведения см. в документах по JMSSerializer. .
ИЗМЕНИТЬ:
Например, вы можете использовать частичное ключевое слово, чтобы выбрать только те данные, которые вам нужны. Хотя я не мог, на всю жизнь, отключить загрузку полных связанных объектов (на два уровня ниже), если я передаю объект объекта в сериализатор (даже при отключении загрузки в DoctrineProxyHandler), но если я использую массив, чем он не использует ленивую загрузку доктрины через прокси (как и ожидалось от c).
Пример с использованием ваших примеров объектов:
$dql = "SELECT t, s, partial b.{id}, partial ss.{id}
FROM Acme\AppBundle\Entity\Task t
JOIN t.story s
JOIN s.board b
JOIN b.stories ss"
$q = $this->_em-createQuery($dql);
$result = $q->getArrayResult();
Таким образом, вы получите что-то вроде:
[
{
id: 33,
title: "My Task",
story: [
{
id: 554,
board: [
{
id: 14,
stories: [
{
id: 554
},
{
id: 3424
},
{
id: 3487
}
]
}
]
}
]
}
]
P.S. Я действительно заинтригован этой "проблемой". В любом случае я постараюсь придумать решение, как сериализовать объект объекта без использования результата массива.
person
Marko Jovanović
schedule
14.08.2012