Доктрина 2 MongoDb ODM ссылки - PullRequest
0 голосов
/ 18 января 2012

У меня есть вопрос, связанный с Doctrine 2 MongoDB ODM в php.

Итак, у меня есть EntityA и в пределах EntityA Я бы хотел сослаться на EntityB через EntityB 's ObjectId .Таким образом, в EntityA у меня есть переменная A со следующим докблоком: @ ODM \ ReferenceOne (targetDocument = "EntityB", simple = "true") .

Проблема в том, что когда я вызываю setMethod , он устанавливает все EntityB в EntityA , а не только objectId это то, что я хотел бы сделать.

В основном 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;

}

Теперь, как мне хранить только идентификатор продукта, а не весь продукт в subCategory->product?

1 Ответ

1 голос
/ 18 января 2012

Так работает ODM.На стороне объекта вы добавляете целое значение Product к SubCategory.

В вашей базе данных Mongo будет храниться только ссылка, например (в вашем элементе Subcategory)

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

Чтобы создать связь, вы просто устанавливаете Product в SubCategory, например

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

Чтобы получить Product ID из SubCategory, вы просто используете

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

(при условии, что у вас есть соответствующие методы установки и методы получения , определенные)


Вы используете ссылки , когда хотите создатьотношение к отдельному документу.Это особенно верно, когда вы можете ссылаться на один документ (например, Product ) из многих других документов (например, SubCategories ).

Используются встроенные документыкогда вы хотите, чтобы этот документ был частью его родителя.

...