1

私はこれらの2つのエンティティを持っています:

メッセージ エンティティ

class Message
{
    /**
    * @ManyToOne(targetEntity="User")
    * @JoinColumn(name="author", referencedColumnName="id_user")
    */
    protected $author;

ユーザー エンティティ

class User
{
    /**
     * @Id
     * @Column(type="integer", nullable=false, name="id_user")
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @Column(type="string", nullable=false)
     */
    protected $name;

次のようなものをエコーするには、ユーザーのメッセージとそのデータの合計を取得する必要があります 。

echo $user->getName() . " have {$user->totalOfMessage()}";

User エンティティでリレーションを作成して、メッセージ コレクションを取得できるようになりました。しかし、サイズを取得するだけでよいかどうかはわかりません。

4

2 に答える 2

2

さて、私は答えを見つけました。少なくとも1つの良いオプション。

Doctrine 2.1以降、アソシエーションを余分な怠惰としてマークすることができます。これは、$ user-> getMessages()-> count()を呼び出してもメッセージが読み込まれず、データベースにCOUNTクエリが発行されることを意味します。

ここで余分な怠惰なコレクションについて読むことができます:https ://www.doctrine-project.org/projects/doctrine-orm/en/2.7/tutorials/extra-lazy-associations.html

于 2012-07-10T03:43:44.223 に答える
0

私は最近、EXTRA_LAZY の読み込みを機能させようとしてきましたが、ページに示されているように、ドキュメンテーションにかなり大きな間違いがあると思われるものを見つけました:-

http://www.doctrine-project.org/docs/orm/2.1/en/tutorials/extra-lazy-associations.html

ほとんどの Doctrine ユーザーは、fetch="EXTRA_LAZY" を ManyToMany 関係の「所有」側に配置する必要があることに気付くかもしれませんが、例では、所有ではない「mappedBy」を含む行に注釈が追加されていることを示しています。側?

fetch="EXTRA_LAZY" ディレクティブを非所有側に追加すると、完全に無視されるようになります。これはドキュメントにもっと明確に記載する必要があると思います。

徹底的な検索の結果、これを説明する記事がどこにも見つからなかったので、これはおそらくドキュメントを修正する価値があると思いますか?

私たちのユースケースでは、かなりの数の「contains」呼び出しを使用し、メモリ制限を超えたために常にクラッシュする処理の特に集中的なブロックが作成され、桁違いに高速に実行される高速プロセスになりました。

この情報が誰かの役に立てば幸いです...

于 2014-03-20T09:24:30.293 に答える