Это моя сущность:
/** * 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
вместо массива всех изображений.
Я делаю что-то неправильно? Или я просто неправильно понимаю поведение отношений?
Поведение Doctrine по умолчанию заключается в ленивом образовании с отображением объектов, поэтому, когда вы создаете дамп своей сущности, она кажется нулевой, поскольку данные не были загружены.
Если вы вызовете метод getImg, то доктрина запросит вашу базу данных для загрузки связанных объектов Productimg, связанных с вашим продуктом.
Когда ArrayCollection сохраняется и управляется менеджером сущности, он становится PersistentCollection, в котором он ведет себя, имеет массив ArrayCollection