0

PHP での Doctrine 2 MongoDB ODM に関する質問があります。

だから私は EntityA を持っていて、EntityA内でEntityBObjectIdを介してEntityBを参照したいと思います。したがって、EntityAには、 @ODM\ReferenceOne(targetDocument="EntityB", simple="true") というDocblockを持つvariableAがあります。

問題は、setMethodを呼び出すと、私がやりたいことであるobjectIdだけでなく、EntityB全体がEntityAに設定されることです。

基本的に EntityA は次のようになります。

ENTITYA {
    randomFieldA,
    randomFieldB,
    EntityB ObjectId
}       

私が試した方法のように、私が望むことが可能かどうか誰かが知っていますか? または誰かがより良い方法を知っていますか?

基本的にこの例のように:

/** @Document */
class TopCategory 
{

    /** @EmbedMany(targetDocument="SubCategory") */
    private $subCategories;

}

/** @EmbeddedDocument */
class SubCategory 
{

    /** @ReferenceOne(targetDocument="Product") */
    private $product;

}


/** @Document */
class Product
{

    /** @id */
    private $id;

    /** @String */
    private $name;

}

製品全体ではなく、製品のIDのみを保存するにはどうすればよいsubCategory->productですか?

4

1 に答える 1

1

これが ODM の仕組みです。オブジェクト側では、全体Productを に追加しSubCategoryます。

あなたのMongoデータベースは、参照のみを保存します。たとえば、(Subcategoryアイテム内)

"product": {
    "$ref": "Product",
    "$id": ObjectId("4b0552b0f0da7d1eb6f126a1")
}

関係を作成するには、単純に を に設定しますProductSubCategory

// $product is a persisted Product object
$subcategory->setProduct($product);

ProductからIDを取得するにはSubCategory、次を使用します

$productId = $subcategory->getProduct()->getId();

(適切なセッターメソッドとゲッターメソッドが定義されていると仮定します)


スタンドアロン ドキュメントへの関係を作成する場合は、参照を使用します。これは、他の多くのドキュメント ( SubCategoriesなど) から 1 つのドキュメント ( Productなど) にリンクしたい場合に特に当てはまります。

埋め込みドキュメントは、そのドキュメントをその親の一部としてのみ使用する場合に使用されます。

于 2012-01-17T23:56:16.730 に答える