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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie einfach Doctrine\Common\Collections\Collection Schnittstelle statt ArrayCollection. ArrayCollection und PersistentCollection diese Schnittstelle implementieren.
Lehre verwendet PersistentCollection für lazy loading von Entitäten. Du hast Recht, mit BEGIERIG ist nicht immer eine gute Lösung - kann es zu perfomance-Problemen.