Doctrine ODM手动参考

时间:2017-02-21 11:33:01

标签: mongodb doctrine doctrine-odm

假设我们有以下文件,它们之间有关系:

<property name="arguments">
     <list>
         <list>
             <value type="com.your.package...StudentType">SENIOR</value>
         </list>
     </list>
</property>

以下代码:

/**
 * @ODM\Document(collection="foo")
 */
class Foo
{
    /** @ODM\Id(name="_id", strategy="NONE", type="string") */
    public $id;

    /** @ODM\Field(name="name", type="string") */
    public $name;

    /**
     * @ODM\ReferenceOne(targetDocument="Bar")
    */
    public $bar;
}


/**
 * @ODM\Document(collection="bar")
 */
class Bar
{
    /** @ODM\Id(name="_id", strategy="NONE", type="string") */
    public $id;

    /** @ODM\Field(name="name", type="string") */
    public $name;
}

在这种情况下与&#34; Bar&#34;的关系将以dbRefs格式存储在mongo中。

$foo = new Foo();
$foo->id = uniqid();
$foo->name = 'thefoo';

$bar = new Bar();
$bar->id = uniqid();
$bar->name = 'thebar';
$foo->bar = $bar;

$dm->persist($bar);
$dm->persist($foo);
$dm->flush();

然而,我想要做的是存储关系&#34;手动&#34;以这种格式:

{
    "_id" : "58ac22815e49d",
    "name" : "thefoo",
    "bar" : {
        "$ref" : "bar",
        "$id" : "58ac22815e59a",
        "$db" : "mydb"
    }
}

Doctrine ODM中是否有一种方法可以映射我的文档以这种格式存储关系?

编辑:感谢malarzm answer我通过以下映射获得了预期的结果。

{
    "_id" : "58ac22815e49d",
    "name" : "thefoo",
    "bar_id" : "58ac22815e59a"
}

1 个答案:

答案 0 :(得分:1)

要使ODM仅存储引用文档的ID,您需要将storeAs="id"添加到参考映射中,有关更多信息,请参阅文档中的Storing References章节。