[TYPO3-german] Problem beim aktualisieren von Collection

Simon Seggewiß info at simonseggewiss.de
Fri Dec 16 23:01:23 CET 2016


Hallo zusammen,

ich habe eine "Image" und eine "Seo" Entity.
Ein Seo-Element kann mehrere Images haben.
Beim ersten Speichern wird alles korrekt in der Datenbank gespeichert.
Möchte ich allerdings einen Wert der Image-Entity bearbeiten, dann wird ein neuer Eintrag angelegt, anstatt den vorhandenen zu aktualisieren.
Kann mir jemand verraten, was ich falsch gemacht habe?

Was ich bisher herausgefunden habe:
Beim Speichern springt er in die setImages(Collection $images) Methode der Seo-Entity. Die dort als Paremeter vorhandenen $images haben beim Speichern eine neue Id bekommen, sodass deswegen wohl ein neuer Datenbankeintrag angelegt wird. Aber warum? Ist mein Template fehlerhaft oder stimmt etwas in meinen Entites nicht?

Hier ein paar Code-Ausschnitte:

class Seo {
    /**
     * @var Collection<VKF\Seo\Domain\Model\Image>
     *
     * @ORM\OneToMany(mappedBy="seo", targetEntity="VKF\Seo\Domain\Model\Image")
     */
    protected $images;

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

    /**
     * @return Collection
     */
    public function getImages()
    {
        return $this->images;
    }

    /**
     * @param Image $image
     */
    public function addImage(Image $image)
    {
        $image->setSeo($this);
        $this->images[] = $image;
    }

    /**
     * @param mixed $images
     */
    public function setImages(Collection $images)
    {
        foreach ($images as $image) {
            $image->setSeo($this);
        }
        $this->images = $images;
    }

    /**
     * @param Image $image
     */
    public function removeImage(Image $image)
    {
        $this->images->removeElement($image);
    }

}



class Image
{
    /**
     * @var Seo
     *
     * @ORM\ManyToOne(inversedBy="images", targetEntity="VKF\Seo\Domain\Model\Seo")
     */
    protected $seo;

    /**
     * @return Seo
     */
    public function getSeo()
    {
        return $this->seo;
    }

    /**
     * @param Seo $seo
     */
    public function setSeo($seo)
    {
        $this->seo = $seo;
    }
}


SeoEditForm.html:

            <f:for each="{seoEntry.images}" as="image" iteration="iterator" key="key">
                            <div class="form-group">
                                <label for="title[{iterator.index}]"><f:translate id="seoEntry.image.title"/></label>
                                <f:form.textfield property="images.{iterator.index}.title" name="seoEntry[images][{iterator.index}].title" class="form-control" value="{image.title}" id="title[{iterator.index}]"/>
                            </div>
                            <div class="form-group">
                                <label for="altTag[{iterator.index}]"><f:translate id="seoEntry.image.altTag"/></label>
                                <f:form.textfield property="images.{iterator.index}.altTag" name="seoEntry[images][{iterator.index}].altTag" class="form-control" value="{image.altTag}" id="altTag[{iterator.index}]"/>
                            </div>
                            <div class="form-group">
                                <label for="url[{iterator.index}]"><f:translate id="seoEntry.image.url"/></label>
                                <f:form.textfield property="images.{iterator.index}.url" name="seoEntry[images][{iterator.index}].url" class="form-control" value="{image.url}" id="url[{iterator.index}]"/>
                            </div>
                            <div class="form-group">
                                <label for="position[{iterator.index}]"><f:translate id="seoEntry.image.position"/></label>
                                <f:form.textfield property="images.{iterator.index}.position" name="seoEntry[images][{iterator.index}].position" type="number" class="form-control" value="{image.position}" id="position[{iterator.index}]"/>
                            </div>
            </f:for>





More information about the TYPO3-german mailing list