2016-03-28 10 views
-1

Sagen wir, SieBenutzerdefinierte Association/Join Lehre

class EntityA { 
     private $id; 
     privated $sharedUniqueId; 
} 

class EntityB { 
     private $id; 
     private $sharedUniqueId; 
} 

//EntityA is in an OneToMany Relation with EntityB 

haben Wie kann man eine OneToMany Vereinigung ohne Lehre entityA_id auf die Entität zu schaffen machen und mithilfe des $sharedUniqueId Attribut. Ich habe den Doc durchgesehen, aber ich kann diesen speziellen Fall immer noch nicht finden. Beachten Sie, dass, ich will keinen Primärschlüssel erstellen, bestehend aus {id,sharedUniqueId}

Für weitere Informationen, ist der Kontext, von der Erstellung einer Tabelle durch INSERT INTO ... SELECT ... ON DUPLICATE KEY und die Referenzierung der Tabelle wird durch diese individuelle ID getan, was ich weiß, nicht ändern, wenn ich jemals wieder die ursprünglichen Daten updaten und somit die IDs ändern würde.

EDIT

Warum habe ich downvote bekommen?

Und hier ist die gleiche Frage gestellt. Is it possible to reference a column other than 'id' for a JoinColumn?

+0

Wie muss es ohne entityA_id gehandhabt werden? Doctrine benötigt diese Felder, um relationale Daten zu speichern. –

+0

Durch die Verwendung einer nicht primären Schlüssel-ID. In diesem Beispiel wäre das '$ sharedUniqueId' – delmalki

Antwort

0

Für die legitimen Leute, die eines Tages dieses Problem haben werden. Dies als in ihrer docs beschrieben ist eine bekannte Einschränkung

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/limitations-and-known-issues.html

Es ist nicht möglich, Spalten zu verwenden, kommen zu Nicht-Primärschlüssel verweisen. Doctrine denkt, dass dies die primären Schlüssel sind, und erstellt Lazy-Loading-Proxies mit den Daten, die zu unerwarteten Ergebnissen führen können. Doctrine kann aus Gründen der Leistung die Richtigkeit dieser Einstellungen zur Laufzeit nicht überprüfen, sondern nur über den Befehl Schema überprüfen.