質問: $this->someRepository->findByConditions(/* ... */); $serializer->serialize($entities, 'json'); }Copy code ``` プロファイラーでは、残りの関係がいっぱいになり始めていることがわかります。データベースクエリの実行を開始して、不足しているすべてのプロパティを埋めます。その後、最終的にクエリがタイムアウトします。 **質問:****指定されたオブジェクトのみを**シリアル化するようにシリアライザーに指示する方法はありますか?欠落している関係を埋めないでください。つまり、遅延読み込みを無効にしますか? 一部のエンティティにはそれ自体への参照があるため、新しいシリアル化グループを追加することも適切ではありません`$parent` 。したがって、クエリを実行することになります。
回答: ### 答え : #### 解決: Serializerは、呼び出しによってDoctrineの遅延読み込みがトリガーされるかどうかを確認できません。 DoctrineのProxy-namespaceからクラスを検索する独自のノーマライザーを作成することもできますが、そもそも問題が解決するのであれば、それはおそらくホットな混乱になると思います。 私が考えることができる最善の解決策は、ORMレベルで問題に取り組むことです。それが、問題の原因となっているからです。 たとえば、DQLまたはQueryBuilderを使用してリポジトリにカスタム検索メソッドを作成できます。これにより、出力する関連オブジェクトに結合する可能性や、不要なフィールドを除外するなど、必要なすべてのデータがフェッチされます。次に、別のハイドレーターを使用して結果をハイドレイトします(Doctrine Docs:Hydrationを参照)。 Doctrineが提供するSimpleObjectHydratorを試すことができます。私の知る限り、このHydratorは遅延読み込みにプロキシを使用せず、代わりに可能な限り積極的に読み込み、元のエンティティを提供するはずですが、積極的な読み込みは希望どおりではない可能性があります。その場合、あなたはそれをあなた自身のハイドレーターのための参照として使うことができます。カスタムハイドレーターを作成するのは非常に面倒な場合があり、代わりに配列出力を選択して、オブジェクトのハイドレーションを完全に放棄することができます。その場合、エンティティ内のアノテーションは必ず失われ、シリアライザーロジックでアドレス指定する必要があります。 代わりに、ネイティブクエリ(つまりSQL)を確認してから、カスタムの結果セットマッピングを確認することもできます。DoctrineDocs:ResultSetMappingBuilderを参照してください。