2017-03-29 13 views
1

私は疑問を持って、私は4年間の教義を使用していますが、私たちは、オブジェクトなどを検索するときに、彼は(関係を含む)エンティティのすべてのデータをロードする場合は知らない:ドクトリン2パフォーマンス回答

$entity = $entityManager->find('Entity', $id); 

この場合、すべてのリレーション属性は設定されていますか?

私は関係の多くの属性を持つクラスを持っています(WITHOUT featch = eager)、その原因は過負荷ですか?

または、doctrineは属性のgetメソッドを使用するとリレーションのみが検索されることを認識していますか?

あなたは明確にする文書を、知っていれば、リンクを投稿してください

答えて

1

レイジーローディングがデフォルトです。収集データは、データベースに初めてアクセスされたときにのみ取得されます。

データを直接ロードする場合は、特定のコレクションを結合してselect句に追加する必要があります。または、前述のようにEAGERフェッチモードを使用してください。 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#entity-object-graph-traversal

から

[...]の代わりにあなたのためのプロキシインスタンスを作成しますバック本当の著者インスタンスとコメント教義のコレクションを、あなたを渡します。これらのプロキシに初めてアクセスする場合にのみ、EntityManagerを経由してデータベースから状態をロードします。簡単にSQLクエリの多くをトリガーするレイジーロードされ、頻繁に使用する場合はひどく実行する部品のためのオブジェクトグラフを横断

:また

。できるだけ効率的に必要なオブジェクトグラフのすべての部分をフェッチ結合するためにDQLを使用するようにしてください。