私のSymfony5アプリケーションには、Product
2つのプロパティ$categories
と$bundles
。を持つエンティティクラスがあります。製品クラスには、両方のプロパティとのManyToMany関係があります。プロパティのいずれかをコメントアウトすると、製品のシリアル化は完全に機能します。ただし、両方のプロパティが存在する場合、シリアル化はタイムアウトします。
Productクラスからのコードの抜粋。
class Product
{
/**
* @ORM\ManyToMany(targetEntity=ProductBundle::class, mappedBy="products")
*/
private $productBundles;
/**
* @ORM\ManyToMany(targetEntity=Category::class, mappedBy="products")
* @MaxDepth(1)
*/
private $categories;
}
シリアル化のコードは以下のとおりです。
$products = $productRepository->findBySearchQuery($name);
$productsJson = $serializerInterface->serialize($products, 'json', [
ObjectNormalizer::CIRCULAR_REFERENCE_HANDLER => function ($object) {
return $object->getId();
}
]);
他のStackoverflowの回答や@MaxDepthで提案されている@ORM / JoinTableアノテーションを使用してみましたが、うまくいきませんでした。プロパティのいずれかがコメントアウトされている場合、コードは機能します。これに関するアドバイスをいただければ幸いです。
@Jakumiが指摘したように、シリアライザーはオブジェクトのプロパティ$categories
とを何度もループしていました$bundles
。シリアル化グループを使用することで、これを回避しました。
製品クラス
class Product
{
/**
* @ORM\ManyToMany(targetEntity=ProductBundle::class, mappedBy="products")
* @Groups("product_listing:read")
*/
private $productBundles;
/**
* @ORM\ManyToMany(targetEntity=Category::class, mappedBy="products")
* @Groups("product_listing:read")
*/
private $categories;
}
カテゴリクラス
class Category
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups("product_listing:read")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Groups("product_listing:read")
*/
private $name;
}
シリアライザーの呼び出し
$products = $productRepository->findBySearchQuery($name);
$productsJson = $serializerInterface->serialize($products, 'json', ['groups' => 'product_listing:read']);
これが将来誰かに役立つことを願っています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加