2016-10-10 3 views
1

Hiho,meine Lehre Verein funktioniert nicht richtig

, was ich erreichen will: i Projekte haben, und innerhalb von Projekt bearbeiten, gibt es eine Form, wo ich auf die Bilder fallen kann (mit dropzone.js) und diejenigen, Bilder werden gespeichert und dem gegebenen Projekt zugewiesen.

Das Hochladen von Bildern funktioniert, die Image-Objekte werden in der Bildtabelle gespeichert und haben die richtige project_id. Wenn ich jedoch auf Project Enity zugreife, ist "images" im Projekt-Array "null". keine Sammlung von Bildtitäten. Es sieht wie eine einfache private Variable ohne Standardwert aus. Ich denke, dass meine OneToMany und ManyToOne Assoziationen nicht zu funktionieren scheinen.

Einige Code:

Project.php

/** 
    * @var ArrayCollection 
    * @ORM\OneToMany(targetEntity="AppBundle\Entity\Image", mappedBy="project", cascade={"persist, remove"}) 
    */ 
    private $images; 

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

    public function addImage(Image $image) 
    { 
     $this->images[] = $image; 
    } 

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

image.php

/** 
    * @var \AppBundle\Entity\Project 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Project", inversedBy="images") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="project_id", referencedColumnName="id") 
    * }) 
    */ 
    private $project; 

    /** 
    * Set project 
    * 
    * @param \AppBundle\Entity\Project $project 
    * 
    * @return Image 
    */ 
    public function setProject(\AppBundle\Entity\Project $project = null) 
    { 
     $this->project = $project; 

     return $this; 
    } 

    /** 
    * Get project 
    * 
    * @return \AppBundle\Entity\Project 
    */ 
    public function getProject() 
    { 
     return $this->project; 
    } 

Alles auf DB

gespeichert enter image description here enter image description here

aber Bilder ist "null" (kein Arraycollection :() enter image description here

Vielleicht etwas fehlt. Aber ich nicht, dass es irgendwie sehen (obwohl seine soooo grundlegende Dinge)

Prost Adrian

+0

'$ Ausbau-> getImages()' ist null? –

+0

Wie Sie im Debugger sehen, dass Bilder null ist, hat getImages nichts zu tun. –

+1

Haben Sie überprüft, wie es aussieht, wenn Sie reguläres Repository verwenden (nicht Param-Konverter)? @MaxP. Es sollte bereits "Doctrine \ ORM \ PersistentCollection" sein, wobei die Eigenschaft "initialized" auf "false" gesetzt ist. –

Antwort

0

Oh Boy ...

als ich die Entitäten von DB (mit Lehre: erzeugen) erzeugt es in der Mitte des Erzeugungsprozesses Mapping-Dateien waren (siehe http://symfony.com/doc/current/doctrine/reverse_engineering.html)

Sobald ich den Ordner src/AppBundle/Resources/config/doctrin gelöscht habe (mit den Dateien orm.config.xml), wurden die Bilder als persistente ArrayCollection angezeigt.

aber immer noch die Ergebnisse wo leer. so hatte ich holen zusätzlich zu setzen = „EAGER“ in die OneToMany Mapping, wie Lazy Loading didnt richtig zu funktionieren scheint (während Zweig Dumping wurde das Ergebnis project.images nicht initialisiert)

Also vielen Dank für Ihre Hilfe. Am Ende zeigen sich meine Bilder richtig.

wäre es nett, wenn Symfony Mapping-Fehler im dev.log schreiben würde, also würde ich nicht nach 2 Tagen suchen müssen.

Cya Adrian

0

Gehen Sie wie folgt in Project.php

im Konstruktor, fügen Sie folgendes:

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

* Ändern Sie die Funktion addImage zu:

public function addImage(Image $image) 
{ 
    if(!$this-images->contains($image)) 
     $this-images->add(image); 
} 

Und dann in image.php, ändern setproject zu:

public function setProject(\AppBundle\Entity\Project $project = null) 
{ 
    $this->project = $project; 

    if($project != null) 
     $project->addImage($this); 

    return $this; 
} 

Persist ein paar Bilder und prüfen, ob "Bilder" nicht null ist.

+0

Vielen Dank Medard, aber ich waren die Orm.xml-Dateien in src/AppBundle/Resources/Config/Doktrin, die meine Bilder ArrayCollection gemacht eine Null :( –

0

Ich stimme Medard über den Konstruktor zu, und Sie können auch versuchen, den fetch-Parameter in der oneToMany-Annotation auf faul zu stellen.

Vielleicht ein Fehl mit dem paramConverter

Verwandte Themen