Доктрина, не может перебирать элементы коллекции

1

У меня проблемы с чтением отношения n: m. У меня есть Collection-Table, коллекция получает несколько предметов за коллекцию. Чтобы решить эту проблему, у меня есть 2 объекта в Доктрине, как показано ниже:

Моя коллекция

<?php

namespace my\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * myCollection
 * @package my\Entity
 *
 * @ORM\Entity
 * @ORM\Table(name="collections")
 */
class Collection
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var
     * @ORM\OneToMany(targetEntity="Item", mappedBy="id", cascade="all")
     */
    private $items;

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

    public function add(Item $oItem){
        $this->items->add($oItem);
        $oItem->setCollection($this);
    }

    /**
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @param int $id
     */
    public function setId($id)
    {
        $this->id = $id;
    }

    public function getItems(){
        return $this->items;
    }

}

И элемент

<?php

namespace my\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * myItem
 * @package my\Entity
 *
 * @ORM\Entity
 * @ORM\Table(name="items")
 */
class Item
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var
     * @ORM\ManyToOne(targetEntity="Collection", inversedBy="items")
     * @ORM\JoinColumn(name="cid", referencedColumnName="id")
     */
    protected $collection;

    public function setCollection(Collection $col = null){
        $this->collection = $col;
    }

    public function getCollection(){
        return $this->collection;
    }

    /**
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }
}

Для создания новых элементов работает нормально. Получены элементы в БД, связанные с коллекцией с помощью клавиши fk/pk.

public function testCreate(){
    $i1 = new Item();
    $i2 = new Item();
    $c = new Collection();
    $c->add($i1);
    $c->add($i2);

    $em = $this->getEntityManager();
    $em->persist($c);
    $em->flush();
}

Но когда я прочитал это так:

public function testRead(){
    $result = $this->getEntityManager()->getRepository('my\Entity\Collection')->findOneById(1);
    $this->sDesktop .= '<br>found '.count($result).' items in collection';
    $items = $result->getItems();
    foreach($items as $item){
        //$this->sDesktop .= '<br>' . $item->getId();
    }
}

Коллекция хорошо сделана, и я могу получить к ней доступ. Но Итерация над ее элементами падает.

Ошибка:

Примечание. Неопределенный индекс: id в /var/www/html/myproj/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php в строке 1768

Я не могу найти решение. Есть ли кто-нибудь, кто может сказать мне, что происходит?

Теги:
doctrine
one-to-many
zend-framework2

1 ответ

0

Проверьте модель коллекции: mappedBy должен быть установлен в 'collection'

/**
 * @var
 * @ORM\OneToMany(targetEntity="Item", mappedBy="collection", cascade="all")
 */
private $items;
  • 0
    круто, это была проблема. Не видел, это, THX

Ещё вопросы

Сообщество Overcoder
Наверх
Меню