8

ドキュメント User で参照されているドキュメント Person があります。User を取得すると、Person オブジェクトは埋め込まれていませんが、Person プロキシ オブジェクトが埋め込まれています。プロキシを「強制」して「完全な」ドキュメントにする方法はありますか (Person proxy => Person)。

メソッドを呼び出して追加のデータを取得しようとしました (そのため、__load がトリガーされますが、オブジェクトは「プロキシ」バージョンのままです。

ODM のドキュメントよりも、誰かがこれについて詳しく説明してくれることを願っています。

4

2 に答える 2

3

これは、 Priming Referencesによって実現できます。

文書例:

/** @Document */
class User
{
    /** @ReferenceOne(targetDocument="Person") */
    private $person;
}

/** @Document */
class Person
{
    // ...
}

QueryBuilder の使用:

/* @var $user User */
$user = $dm->createQueryBuilder('User')
    ->field('person')->prime(true)
    ->getQuery()
    ->getSingleResult();
于 2012-04-01T02:18:38.833 に答える
2

Proxy クラスはコードに対して 100% 透過的でなければならないため、元のオブジェクトを抽出する必要はありません。

API を介して送信するなど、ドキュメントをシリアル化する必要がある場合は、ドキュメントにserialize()メソッドを正しく実装してください。

プロキシを使用せずに参照ドキュメントを取得する必要がある場合は、それを取得するかprime()、別のクエリを指定してフェッチすることができhydrate(false)ます。

$user = $dm->createQueryBuilder('Person')
            ->field('_id')->equals($user->getPerson()->getId())
            ->hydrate(false)

詳細については、 Doctrine ODM Doc: Disabling hydrationを参照してください。

于 2013-04-29T09:50:39.163 に答える