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 :