Ankündigung

Einklappen
Keine Ankündigung bisher.

Doctrine 2 - ManyToMany

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Doctrine 2 - ManyToMany

    Hallo zusammen,

    vielleicht hat der ein oder andere hier ja schon Erfahrungen mit Doctrine 2 gesammelt. Ich versuche mich gerade daran und es klappt auch alles soweit ganz gut, nur bei den ManyToMany-Relations habe ich noch ein Problem.

    Ich führe folgenden Code aus:
    PHP-Code:
    $phrase $em->getRepository('Phrase')->findOneById(1);

    $vocable $em->getRepository('Vocable')->findOneById($id);

    $vocable->getPhrases()->add($phrase);
    $phrase->getVocables()->add($vocable);

    $em->persist($phrase);
    $em->flush(); 
    Beim ersten mal funktioniert das ganze noch prima. In der Verknüpfungstabelle steht dann z.B. folgendes drin:
    Code:
    voc_id	| phrase_id
    --------------------
    5	| 1
    Füge ich eine weitere Vokabel hinzu, schau das ganze allerdings so aus:
    Code:
    voc_id	| phrase_id
    --------------------
    5	| 1
    5	| 1
    8	| 1
    Er fügt die bereits vorhandenen Verknüpfungen ein weiteres mal ein.
    Da das ganze wohl so nicht geplant ist und es sich um ein ziemlich offensichtliches Problem ist, gehe ich stark davon aus, dass der Fehler bei mir liegt.

    Die Entities sehen so aus:
    PHP-Code:
    /**
     * @Entity
     * @ChangeTrackingPolicy("DEFERRED_EXPLICIT")
     * @Table(name="voc_vocables")
     */
    class Vocable
    {
        public function 
    __construct()
        {
            
    $this->phrases    = new Doctrine/Common/Collections/ArrayCollection();
        }

        
    /**
         * @Id
         * @Column(type="integer", name="vocable_id")
         * @GeneratedValue
         */
        
    protected $id;

        
    /**
         * @ManyToMany(targetEntity="Phrase", mappedBy="vocables")
         */
        
    protected $phrases;

        public function 
    getPhrases()
        {
            return 
    $this->phrases;
        }
    }

    /**
     * @Entity
     * @ChangeTrackingPolicy("DEFERRED_EXPLICIT")
     * @Table(name="voc_phrases_new")
     */
    class Phrase
    {
        public function 
    __construct()
        {
            
    $this->vocables    = new Doctrine/Common/Collections/ArrayCollection();
        }

         
    /**
         * @Id
         * @Column(type="integer", name="id")
         * @GeneratedValue
         */
        
    protected $id;

        
    /**
         * @ManyToMany(targetEntity="Vocable", inversedBy="phrases")
         * @JoinTable(name="voc_phrases_j",
         *      joinColumns={@JoinColumn(name="phrase_id", referencedColumnName="id")},
         *        inverseJoinColumns={@JoinColumn(name="voc_id", referencedColumnName="vocable_id")})
         */
        
    protected $vocables;

        public function 
    getVocables()
        {
            return 
    $this->vocables;
        }

    (Die / sollen \ sein, aber die stellt das Forum leider nicht dar.)

    Hat irgendjemand vielleicht eine Idee, wo ich den Fehler mache? Google habe ich bereits ohne großen Erfolg angeschmissen und die offizielle Dokumentation hilft mir auch nicht weiter (oder ich hab einfach Tomaten auf den Augen).
    Viele Grüße

    Melkor
    Programming PHP
Lädt...
X