0

皆さん、今晩は。

Doctrine/Mongo の問題を解決してください。

別のドキュメントへの ReferenceOne と他のドキュメントへの ReferenceMany を持つドキュメントがあります。

したがって、最初のドキュメントの完全なドキュメント ツリーを連想配列として取得するには、1 つのクエリを実行する必要があります。

私はそのようにしようとしています:

return $this->createQueryBuilder()
        ->field('category')->references($category)
        ->field('vendor')->prime()
        ->field('chars')->prime()
        ->hydrate(false)
        ->getQuery()
        ->execute();

しかし、結果として、次のような配列が得られます:

Array
(
[0] => Array
    (
        [_id] => MongoId Object
            (
                [$id] => 52e374c21c83735f098b4567
            )

        [category] => Array
            (
                [$ref] => Category
                [$id] => MongoId Object
                    (
                        [$id] => 52dc56eb1c837345098b4567
                    )

                [$db] => doctrine
            )

        [chars] => Array
            (
                [0] => Array
                    (
                        [$ref] => ProductChar
                        [$id] => MongoId Object
                            (
                                [$id] => 52e374c21c83735f098b4568
                            )

                        [$db] => doctrine
                    )

                [1] => Array
                    (
                        [$ref] => ProductChar
                        [$id] => MongoId Object
                            (
                                [$id] => 52e374c21c83735f098b4569
                            )

                        [$db] => doctrine
                    )

            )

        [href] => href-test
        [price] => 500
        [title] => test
        [vendor] => Array
            (
                [$ref] => Vendor
                [$id] => MongoId Object
                    (
                        [$id] => 52e170571c837360098b4567
                    )

                [$db] => doctrine
            )

    )

)

しかし、参照ドキュメントの ID だけでなく、すべての値も必要です。

そのため、ドキュメント配列ツリー全体を取得する方法がわかりません。

よろしくお願いします!

4

1 に答える 1

3

プライミングには水分補給が必要です。調べQuery::execute()てみると、ハイドレーションが無効になっていると突然元に戻ることがわかります。水和が有効になっている場合、プライマーの処理はそのメソッドの後半で行われます。Priming Referencesで説明されていないため、この制限を文書化するために#800を作成しました。将来、プライミングのサポートを実装できる可能性がありますが、現時点ではその計画はありません。

于 2014-02-10T19:58:14.910 に答える