У меня проблемы с чтением отношения 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
Я не могу найти решение. Есть ли кто-нибудь, кто может сказать мне, что происходит?
Проверьте модель коллекции: mappedBy должен быть установлен в 'collection'
/**
* @var
* @ORM\OneToMany(targetEntity="Item", mappedBy="collection", cascade="all")
*/
private $items;