違いは何ですか fetch="EAGER"
およびfetch="LAZY"
アノテーション@ManyToOne
in Doctrine?
/**
* @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="EAGER")
*/
/**
* @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="LAZY")
*/
簡単に説明すると、エンティティを読み込んでいて、それが1つ以上のエンティティと関連付けられている場合、doctrine do?
関連付けが[〜#〜] eager [〜#〜]としてマークされている場合、関連付けられたエンティティもフェッチしてロードします。
関連付けが[〜#〜] lazy [〜#〜]とマークされている場合、doctrineはプロキシオブジェクトを作成します(ダミーオブジェクト)実際のエンティティの代わりに。その関連エンティティ($cart->getItems()
など)を最初に呼び出したときのみ、doctrineはそのオブジェクトをフェッチしてロードしますs)データベースから。
それらの違いに関する追加情報:
_(fetch = "EAGER")
_
元のクエリターゲットエンティティがDoctrineからロードされるとすぐに、関連するエンティティが取得されます。つまり、DBには追加のSQLクエリはありません。
_(fetch = "LAZY")
_
関連するエンティティは、元のクエリターゲットエンティティが$cart->getItems()
などの参照メソッドを呼び出す場合にのみフェッチされます。つまり、DBにはadditional
SQLクエリがあります。