2017-01-17 3 views
1

Это моя сущность:Доктрина. Почему я получаю persistentCollection и пустой массив на ManyToMany?

/** 
* Productgeneral 
* @ORM\Table(name="ProductGeneral", indexes={@ORM\Index(name="category_id", columns={"category_id"})}) 
* @ORM\Entity 
*/ 
class Productgeneral { 

    //some cols 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="product_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $productId; 

    /** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Productimg", inversedBy="product") 
    * @ORM\JoinTable(name="producttoimg", 
    * joinColumns={ 
    *  @ORM\JoinColumn(name="product_id", referencedColumnName="product_id") 
    * }, 
    * inverseJoinColumns={ 
    *  @ORM\JoinColumn(name="img_id", referencedColumnName="img_id") 
    * } 
    *) 
    */ 
    private $img; 

    /** 
    * Constructor 
    */ 
    public function __construct() { 
     $this->img = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    //getter & setters 
} 

/** 
* Productimg 
* @ORM\Table(name="ProductImg") 
* @ORM\Entity 
*/ 
class Productimg { 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="img_id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $imgId; 

    /** 
    * @var \Doctrine\Common\Collections\Collection 
    * 
    * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Productgeneral", mappedBy="img") 
    */ 
    private $product; 

    /** 
    * Constructor 
    */ 
    public function __construct() { 
     $this->product = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    //getters & setters 
} 

Когда я бегу:

*$this->getDoctrine()->getRepository('AppBundle:Productgeneral')->findAll();* 

я получаю каждый столбец с его правильное значение, но img; который возвращает PersistentCollection вместо массива всех изображений.

Я что-то не так? Или я просто неправильно понимаю поведение отношений?

+0

ли вы создать сеттеры и Getter? Вам понадобится 'setImage (AppBundle \ Entity \ Productimg $ img)', который добавляет изображение в ArrayCollection. –

+1

Вы пытались перебрать PersistentCollection? Вы проверили, есть ли данные в таблице продукта? –

+0

* Да У меня есть следующие геттеры и сеттер: Добавить img, Удалить img, Получить img. * Все таблицы заполнены правильными данными * # ConstlectionCollection пустой. Я вижу это через функцию дампа Twig – giacomoto

ответ

1

По умолчанию поведение Doctrine - это ленивые объекты с отображением образов, поэтому, когда вы создаете дамп своей сущности, она кажется нулевой, поскольку данные не были загружены.

Если вы вызываете метод getImg, то доктрина будет запрашивать вашу базу данных для загрузки связанных объектов Productimg, связанных с вашим продуктом.

После того, как ArrayCollection это сохранялось и управляется менеджером объекта становится PersistentCollection он ведет себя точно имеет ArrayCollection

+0

Когда я вызываю getImg(), ничего не меняется. Все равно получите PersistenCollection с пустым #collection. Методы: http://pastebin.com/kH0nuSzA – giacomoto

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