2017-02-21 2 views
0

Angenommen wir folgende Unterlagen Beziehung zwischen ihnen:Lehre ODM mit manueller Referenz

/** 
* @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; 
} 

Und dem folgenden Code:

$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(); 

In diesem Fall ist die Beziehung zu „Bar“ gespeichert werden in Mongo in dbRefs Format.

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

aber, was ich versuche zu tun, um die Beziehung zu speichern „von Hand“ in diesem Format:

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

Gibt es eine Möglichkeit in Lehre ODM, dass ich meine Dokumente abbilden kann die zum Speichern Beziehungen in einem solchen Format?

Edit: Dank Malarzms answer erreichte ich das gewünschte Ergebnis mit dem folgenden Mapping.

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

    /** 
    * @ODM\ReferenceOne(name="bar_id", targetDocument="Bar", storeAs="id") 
    */ 
    public $bar; 

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

Antwort

1

Für ODM nur id referenzierte Dokument speichern Sie storeAs="id" auf Ihr Referenz-Mapping hinzufügen müssen, um weitere Informationen bitte Storing References Kapitel in der Dokumentation sehen.

+0

Danke für die Antwort. Es funktioniert genau so, wie ich es wollte! – memo

Verwandte Themen