Lehre manyToMany zurück PersistentCollection statt ArrayCollection

Arbeite ich mit Symfony 3.1 und Lehre 2.5.

Richte ich eine manyToMany Beziehung wie ich es immer Tue :

manyToMany:
        placeServices:
            targetEntity: Acme\MyBundle\Entity\PlaceService
            joinTable:
                name: place_place_service
                joinColumns:
                    place_id:
                        referencedColumnName: id
                inverseJoinColumns:
                    place_service_id:
                        referencedColumnName: id

Und Methoden hinzufügen zu meiner Person

    protected $placeServices;

    ...

    public function __construct()
    {
        $this->placeServices = new ArrayCollection();
    }

    ...

    /**
     * @return ArrayCollection
     */
    public function getPlaceServices(): ArrayCollection
    {
        return $this->placeServices;
    }

    /**
     * @param PlaceServiceInterface $placeService
     * @return PlaceInterface
     */
    public function addPlaceService(PlaceServiceInterface $placeService): PlaceInterface
    {
        if(!$this->placeServices->contains($placeService)) {
            $this->placeServices->add($placeService);
        }

        return $this;
    }

    /**
     * @param PlaceServiceInterface $placeService
     * @return PlaceInterface
     */
    public function removePlaceService(PlaceServiceInterface $placeService): PlaceInterface
    {
        if($this->placeServices->contains($placeService)) {
            $this->placeServices->removeElement($placeService);
        }

        return $this;
    }

Die Sache ist, wenn ich die Last meiner Person, in der Lehre setzen eine PersistentCollection in der $this->placeServices Eigenschaft. Das klingt nicht wie ein großes problem, außer dass wenn ich ein Formular erstellen, um diese zwei Entitäten (eine einfache mehrere Checkboxen mit symfony form geben), wenn $Formular->handleRequest() wird ausgelöst, Lehre versuchen zu injizieren, die neuen Daten in meine Person, und wirft einen Fehler, falls der get - /add - /remove-Methode nicht verwenden ArrayCollection.

Kann ich Kraft meiner get - /add - /remove-Methoden zu transforme der PersistentCollection zu ArrayCollection (mit unwrap-Methode), dann aber die Beziehungen sind nicht dauerhaft.

Habe ich einen workaround gefunden, wenn ich fetch="EAGER" auf die relation der Eigenschaft initialisiert mit ArrayCollection gespeichert, und die Beziehung dauerhaft. Aber ich bin nicht sicher, es ist eine gute Lösung.

Dank 🙂

  • Könnten Sie das update des symfony-form und die genaue Fehlermeldung?
InformationsquelleAutor Thomas Piard | 2016-07-16
Schreibe einen Kommentar