Doctrine manyToMany gibt PersistentCollection anstelle von ArrayCollection zurück.

Ich arbeite mit Symfony 3.1 und Doctrine 2.5.

Ich baue wie immer eine manyToMany-Beziehung auf:

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

Und füge Methoden zu meiner Entität hinzu

    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 meine Entität lade, Doktrin ein @ setz PersistentCollection in der Eigenschaft $ this-> placeServices. Dies hört sich nicht nach einem großen Problem an, außer dass Doctrine beim Erstellen eines Formulars zum Verbinden dieser beiden Entitäten (ein einfaches Kontrollkästchen mit Symfony-Formulartyp) und beim Auslösen von $ form-> handleRequest () versucht, die neuen Daten einzufügen in meiner Entität, und werfen Sie einen Fehler, wenn Get / Add / Remove-Methode nicht mit ArrayCollection.

Ich kann meine Getter / Add / Remove-Methoden zwingen, die PersistentCollection in ArrayCollection umzuwandeln (mit der Unwrap-Methode), aber dann bleiben die erstellten Beziehungen nicht erhalten.

Ich habe eine Problemumgehung gefunden, wenn ich @ gesetzt ha fetch = "EAGER" in der Beziehung wird die Eigenschaft mit ArrayCollection initialisiert und die Beziehung bleibt bestehen. Aber ich bin mir nicht sicher, ob es eine gute Lösung ist.

Vielen Dank :

Antworten auf die Frage(2)

Ihre Antwort auf die Frage