2

他のいくつかのドキュメントへの参照を含むドキュメントがあります。ほとんどの人と同じように、私はこれらのドキュメントを表示するためにURLの「id」フィールドでMongoIdを使用しています。メインドキュメントからこれらの参照ドキュメントへのリンクを表示したいという状況です。参照されたドキュメントのIDを取得するために、次のようなコードを使用しています。

$mainDocument->getReferencedDoc()->getId();

ここでの明らかな煩わしさは、私がIDを取得できるようにするために、doctrineが別のクエリを実行してその参照ドキュメントをフェッチすることです。ただし、IDは技術的には、参照フィールドのメインドキュメントにすでに存在します。参照されているドキュメント全体を照会してハイドレイトすることなく、IDのみを取得するより効率的な方法があるべきではありませんか?これを実行するたびにカスタムクエリを作成する必要がありますか?

参照ドキュメントへのリンクを含むメインドキュメントの大規模なリストを生成する場合、この問題は重大になります。

4

3 に答える 3

0

これを行う最も簡単な方法は、Documentクラスに2番目のプロパティを追加することです。

/**
 * @ReferenceOne(targetDocument="SomeOtherDocument", simple=true)
 */
protected $referencedDoc;

/**
 * @Field(name="referencedDoc", type="string")
 */
protected $referencedDocId;

今、あなたはただすることができます$document->getReferencedDocId();。type = stringのため、これが可能かどうかは完全にはわかりません。私はこれをORMで使用していますが、ODMではまだ使用していません。

于 2012-07-02T15:35:17.163 に答える
0

2月6日のこのコミット以降、このように動作ているようです。したがって、この問題は最新のmongodb-odmを使用することで解決されます。

于 2012-07-07T18:03:34.513 に答える
0

誰かが参照されたMongoDBドキュメントの識別子を遅延ロードせずに取得する正しい方法が必要な場合はそれだけです:

/** @var $metaData \Doctrine\ODM\MongoDB\Mapping\ClassMetadata */
$metaData = $this->documentManager->getClassMetadata('SomeReferencedDocument');
$metaData->getIdentifierValue($object->getSomeReferencedDocument())

代わりに(最新のDoctrineODMBundleを使用して、参照されたドキュメントを遅延ロードします):

$object->getSomeReferencedDocument()->getId();
于 2013-09-16T18:33:46.547 に答える