2016-10-10 49 views
1

Hiho,моя доктрина ассоциация не работает должным образом

, что я хочу добиться: у меня есть проекты, и в рамках проекта-редактирования, есть форма, в которой я могу упасть изображения на (с dropzone.js), и те, изображения сохраняются и присваиваются данному проекту.

Работы по загрузке изображений. Объекты изображения сохраняются в таблице изображений, и они имеют право project_id. Но если я получаю доступ к Project Enity, «изображения» будут «нулевыми» в массиве проектов. а не коллекция изображений Entites. Он выглядит как простая частная переменная без значения по умолчанию. Я думаю, что мои ассоциации OneToMany и ManyToOne, похоже, не работают.

Некоторые Код:

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; 
    } 

Все сохраняется в БД

enter image description here enter image description here

но изображения является "пустой" (не ArrayCollection :() enter image description here

Может быть, есть что-то отсутствует. Но я не вижу его как-то (хотя его тааак основной материал)

Приветствия Адриан

+0

'$ Проект-> getImages()' является недействительным? –

+0

, как вы видите в отладчике, что изображения равны нулю, getImages не имеет никакого доступа .. –

+1

Вы проверили, как это выглядит при использовании обычного репозитория (а не преобразователя параметров)? @MaxP. это должно быть уже 'Doctrine \ ORM \ PersistentCollection' с параметром' initialized', установленным на 'false'. –

ответ

0

Oh Boy ...

, как я сгенерировал сущности из БДА (с доктриной: генерировать) там были Картирование файлов в середине процесса производства (см http://symfony.com/doc/current/doctrine/reverse_engineering.html)

Как только я удалил папку src/AppBundle/Resources/config/doctrine (с файлами orm.config.xml в ней), изображения отображались как постоянные ArrayCollection.

, но все же результаты, где пусто. поэтому я должен был дополнительно ставить выборки = «EAGER» в OneToMany Mapping, поскольку Lazyloading не показалось, чтобы работать должным образом (в то время как демпинг в веточке, результат project.images не был инициализирован)

Так Большое спасибо за вашу помощь. в конце, мои изображения отображаются правильно.

было бы хорошо, если бы symfony записывал ошибки отображения в dev.log, поэтому мне не пришлось бы искать 2 дня.

суа Адриан

0

Выполните следующие действия в Project.php

В конструкторе, добавьте следующее:

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

* Изменить функцию addImage на:

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

И затем в image.php, изменить setProject на:

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

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

    return $this; 
} 

Упорство несколько изображений и проверить, «Изображения» не равно нулю.

+0

спасибо alot Medard, но я был файлами orm.xml, находящимися в src/AppBundle/Resources/config/doctrine, которые сделали мои изображения ArrayCollection null :( –

0

Я согласен с Медардом о конструкторе, и вы также можете попытаться установить параметр выборки, чтобы лениться на аннотации oneToMany.

Может быть, промах с paramConverter

Смежные вопросы