2016-03-23 15 views
1

Ich versuche das folgende Doctrine-ORM-Beispiel in Doctrine ODM zu portieren.Unidirektionale Viele-zu-Eins-Beziehung in Doctrine MongoDB ODM ohne MongoId

<?php 
/** @Entity */ 
class User 
{ 
    /** 
    * @ManyToOne(targetEntity="Address") 
    * @JoinColumn(name="address_id", referencedColumnName="address_id") 
    */ 
    private $address; 
} 

/** @Entity */ 
class Address 
{ 
    // ... 
} 

Ich bin auf der Suche nach dem Gegenstück von @JoinColumn(), die ich nicht in der Dokumentation finden konnte. Grundsätzlich möchte ich den referenzierenden Feldnamen und den referenzierten Feldnamen selbst setzen. Wie kann ich das machen?

+0

ODM-Referenzen sind ziemlich gut dokumentiert: http://doctrine-orm.readthedocs.org/projects/doctrine-mongodb-odm/en/latest/reference/reference-mapping.html Dokumente werden nur per ID referenziert. –

Antwort

1

In MongoDB können Sie nur nach ID referenzieren, aber Sie sind nicht auf MongoIDs beschränkt. In der Tat können Sie verwenden, was auch immer Sie mögen, einschließlich Objekte als IDs.

Dies ist, was Sie in MongoODM tun sollten, um eine Eigenschaft von Adresse als ID und User als Address durch den Wert dieses Feldes zu haben. Sie sollten auch simple=true als Referenz festlegen.

/** 
* @Document 
*/ 
class User 
{ 
    /** 
    * @ReferenceOne(targetDocument="Address", simple=true) 
    */ 
    protected $address; 
} 

/** 
* @Document 
*/ 
class Address 
{ 
    /** 
    * @Id(strategy="NONE") 
    */ 
    protected $someProperty; 
} 

Denken Sie daran, dass, wenn Sie den Wert dieser Eigenschaft in einer der nachgenannten Adressen zu ändern, die von einem oder mehreren Benutzern verwiesen werden, dass Bezugs korrupt geworden und einige schmerzhafte Fehler in der Lehre ODM verursachen.

+0

Nur um meine zwei Cent hinzuzufügen, Mongo lässt Sie Dokumentkennung nicht ändern, sobald es festgelegt ist, damit nichts Schlimmes passieren kann. Aber nichts hält Sie davon ab, die "Adresse" zu entfernen, auf die verwiesen wird, wenn das passiert, https://github.com/doctrine/mongodb-odm/pull/1336 kann helfen – malarzm