JMS 除外ポリシーを使用します。
子と製品関連のエンティティを含めたくない場合に、カテゴリ エンティティに注釈を使用する例:
use ...
JMS\SerializerBundle\Annotation\ExclusionPolicy,
JMS\SerializerBundle\Annotation\Exclude,
...;
/**
* ...
* @ExclusionPolicy("none")
*/
class Category
{
/**
* ...
* @Exclude
*/
private $children;
/**
* ...
* @Exclude
*/
private $products;
}
詳細については、JMSSerializer のドキュメントを参照してください。
編集:
たとえば、部分キーワードを使用して、必要なデータのみを選択できます。私の人生では、エンティティオブジェクトをシリアライザーに渡すと(DoctrineProxyHandlerでロードを無効にしても)、関連エンティティ全体のロードを無効にすることはできませんでしたが(DoctrineProxyHandlerでロードを無効にしても)、配列を使用すると、それよりもプロキシを介して教義の遅延読み込みを使用しません (ofc の予想どおり)。
サンプル エンティティを使用した例:
$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
}
]
}
]
}
]
}
]
PS私は実際にこの「問題」に興味をそそられています。とにかく、配列の結果を使用せずにエンティティ オブジェクトをシリアル化する方法の解決策を考えてみます。