次のフィールドを持つCategoryというエンティティがあります。
id: integer
name: string
slug: string
children: OneToMany(targetEntity="Category", mappedBy="parent")
parent: ManyToOne(targetEntity="Category", inversedBy="children")
ご覧のとおり、各カテゴリは別の子/親になることができます。
すべてのカテゴリを配列にマップする必要があるため、それらをすべてまとめてロードするのが最善であると考えました。
$categoryRepository->findAll();
後で、マッピング メソッドで、各カテゴリの子を取得したいので、使用します
$category->getChildren();
最初にすべてのカテゴリをロードしたため、実行されるクエリは 1 つだけだと思いましたが、プロファイラーの表示が異なります。すべてのレコードをフェッチするクエリが1 つあります(プロファイラーからの出力)。
SELECT t0.id AS id1, t0.name AS name2, t0.slug AS slug3, t0.parent_id AS parent_id4
FROM acme_category t0
そして、すべてのレコードに対して別のクエリがあります。
SELECT t0.id AS id1, t0.name AS name2, t0.slug AS slug3, t0.parent_id AS parent_id4
FROM omnt_work_category t0 WHERE t0.parent_id = 1
SELECT t0.id AS id1, t0.name AS name2, t0.slug AS slug3, t0.parent_id AS parent_id4
FROM omnt_work_category t0 WHERE t0.parent_id = 1
etc..
何故ですか?最初からすべてのレコードをロードするにはどうすればよいですか?
ありがとう!