In einem Zend Framework 2-Projekt haben wir zwei Einheiten Lehre 2 und wir möchten ein Element aus einer Sammlung allready in der Datenbank gespeichert entfernen ...Element aus ArrayCollection auf OneToMany entfernen löscht es nicht auf persist()?
So haben wir eine erste Einheit FormGroupConstraint genannt:
/**
* FormGroupConstraint
*
* @ORM\Table(name="form_group_constraint")
* @ORM\Entity(repositoryClass="Application\Dao\FormGroupConstraintDao")
*/
class FormGroupConstraint {
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @param \Doctrine\Common\Collections\ArrayCollection
* @ORM\OneToMany(targetEntity="Application\Entity\FormQuestionConstraint", mappedBy="groupConstraint", fetch="EAGER", cascade={"persist", "merge", "refresh", "remove"})
*/
protected $constraints;
public function __construct()
$this->constraints = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* @param \Doctrine\Common\Collections\ArrayCollection $constraints
*/
public function addConstraints($constraints) {
foreach ($constraints as $constraint) {
$this->constraints->add($constraint);
}
return $this->constraints;
}
/**
* @param \Doctrine\Common\Collections\ArrayCollection $constraints
*/
public function removeConstraints($constraintsToRemove) {
foreach ($constraintsToRemove as $key => $constraintToRemove) {
$this->constraints->removeElement($constraintToRemove);
}
return $this->constraints;
}
}
Und die Untereinheit namens FormQuestionConstraint:
Sowenn wir versuchen, zu schaffen, bestehen bleiben, eine FormGroupConstraint Einheit spülen, kein Problem, aber wenn wir ein Element von $ Einschränkungen Arraycollection entfernt werden soll, passiert nichts ...
Wir verwenden Lehre-orm -Modul für zend 2 installiert mit composer.phar in dev-master ...
Hier ist ein Beispiel dafür, was wir zu tun versuchen:
$constraint = $this->findConstraintByGroup(1);
$formGroupConstraint = $this->_em->findOneById(1);
$formGroupConstraint->getConstraints()->removeElement($constraint);
$this->_em->persist($formGroupConstraint);
$this->_em->flush();
Kein Fehler, aber keine löschen oder entfernen ... Und wenn wir var_dump(), um die getConstraints() vor bestehen bleiben(), eigentlich das Element noch in der Arraycollection ...
Könnte jemand erklären uns, wie wir konnten, Tun Sie das oder warum wird das Element nicht entfernt?
Vielen Dank für Ihre Antwort, aber das Problem ist, wenn wir in einer Schleife über die Arraycollection versuchen Weichen Einheiten zu sehen entfernt werden, da keine Änderungen zwischen der Datenbank und der aktuellen Arraycollection ... Alle removeElement ($ Einschränkung) ist nutzlos ??? Warum diese Methode nichts auf der ArrayCollection tun? (Hibernate-Liste oder andere ORM Collection-Container könnte so funktionieren ...) –
Es gibt keine Änderung an der '' ArrayCollection'' auch nach dem Aufruf von '' flush() '' ?? versuchen Sie es '' $ this -> _ em-> flush() '' wenn nicht. –
Was wir tun möchten ist: ** 1: load $ formGroupConstraint ** ** 2: Entfernen Sie Elemente durch den Aufruf von $ formGroupConstraint-> getConstraints() -> removeElement ($ Constraint); ** ** 3 : am Ende $ $ this -> _ em-> persist ($ formGroupConstraint); $ this -> _ em-> flush(); **. Aber nichts ist aus der Sammlung oder aus der Datenbank entfernt. Ist dieser Prozess möglich? –