2013-09-06 5 views
16

Wie lege ich in Doctrine 2 eine Join-Tabelle mit zusätzlichen Spalten oder einer Viele-zu-Viele-Verknüpfung mit zusätzlichen Eigenschaften an?Doktrin 2: Umgang mit Join-Tabellen mit zusätzlichen Spalten

+0

@ThatBlairGuy ich bemerkt, dass Sie eine Menge von der [tag: extra] entferne Tag. Diese Änderung war ausreichend, aber achten Sie darauf, alle Aspekte eines Posts zu fixieren und zusätzlich das Tag zu entfernen. Für mehr, lesen Sie diese [Metadiskussion] (https://meta.stackoverflow.com/questions/314488/how-to-deal-with-serial-tag-only-edits-from-sub-2k-users) – ryanyuyu

Antwort

50

Zuerst weg, lassen Sie mich erklären, dass dies tut nicht existieren:

A Tisch beitreten (auch als Verknüpfungstabelle bekannt oder Querverweistabelle) ist eine Tabelle, die 2 Links (oder mehr) andere Tabellen zusammen innerhalb der gleichen Datenbank nach Primärschlüssel. Das bedeutet, dass eine Join-Tabelle nur Fremdschlüssel enthält, für diese zusätzlichen Spalten gibt es keinen Platz.

Also, wenn Sie zusätzliche Spalten in einer solchen Tabelle benötigen, ist es nicht mehr nur eine "Verknüpfung" zwischen anderen Tabellen, sondern wird eine echte Tabelle für sich!

In Bezug auf Lehre 2 haben Sie nicht mehr eine Viele-zu-Viele-Verknüpfung zwischen 2 Entitäten, sondern erhalten eine Eins-zu-Vielen/Viele-zu-Eins-Verknüpfung zwischen 3 Entitäten.

Lesen Sie hier weiter, um weitere Informationen Erläuterungen zu lesen:

+0

Diese Links sind kaputt, kann jemand sie aktualisieren? –

+2

Links werden aktualisiert! (Formatierung kann ein bisschen aus, wird so schnell wie möglich behoben werden) –

+0

Vielen Dank für die Aktualisierung der Links! –

1

Im zweiten Artikel, schlage ich vor, ein kleines Update. Anstelle des vollständigen Ereignis, verwenden Sie einen LifecycleCallback innerhalb des Unternehmens selbst:

/** 
* @ORM\Entity 
* @ORM\Table(name="jobs”) 
* @ORM\HasLifecycleCallbacks 
*/ 
class Job 
{ 
    // ... 

    /** 
    * @ORM\PreRemove 
    */ 
    public function preRemoveCallback() 
    { 
     $this->setPerson(null); 
     $this->setCompany(null); 
    } 
} 
Verwandte Themen