Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Undefined index on doctrine m:n relation

I have a 'department' and 'newsItem', which are related m:n. Whenever I try to enumerate over a department's newsItems, thus triggering retrieval from the db, I get this error:

 at ErrorHandler ->handle (   '8',   'Undefined index: newsItems',   '/.../ufscar_symfony/vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php',   '807',   array(     'assoc' => array(       'fieldName' => 'newsItems',       'joinTable' => array(),       'targetEntity' => 'UfscarDfmc\OrgBundle\Entity\NewsItem',       'mappedBy' => 'newsItems',       'inversedBy' => null,       'cascade' => array(),       'fetch' => '2',       'type' => '8',       'isOwningSide' => false,       'sourceEntity' => 'UfscarDfmc\OrgBundle\Entity\Department',       'isCascadeRemove' => false,       'isCascadePersist' => false,       'isCascadeRefresh' => false,       'isCascadeMerge' => false,       'isCascadeDetach' => false     ),     'sourceEntity' => object(Department),     'offset' => null,     'limit' => null,     'criteria' => array(),     'sourceClass' => object(ClassMetadata)   ) ) 

What is especially weird is, that there is another relation in department, to another m:n entity, that just works, and there is no difference in how the mapping is set up, I checked 10 times at least.

The classes and the full stacktrace:

     /**  * @ORM\Table()  * @ORM\Entity(repositoryClass="...\OrgBundle\Entity\DepartmentRepository")  */ class Department {         /**      * Inverse Side      *      * @ManyToMany(targetEntity="NewsItem", mappedBy="newsItems")      */     private $newsItems;      public function __construct()     {         $this->newsItems = new \Doctrine\Common\Collections\ArrayCollection();     }     /**      * Get newsItems      *      * @return Doctrine\Common\Collections\Collection       */     public function getNewsItems()     {         return $this->newsItems;     } }   class NewsItem {     /**      * Owning Side      *      * @ManyToMany(targetEntity="Department", inversedBy="newsItems")      * @JoinTable(name="newsItems_departments",      *      joinColumns={@JoinColumn(name="newsItem_id", referencedColumnName="id")},      *      inverseJoinColumns={@JoinColumn(name="department_id", referencedColumnName="id")}      *      )      */     private $departments;      public function __construct(){         $this->departments = new \Doctrine\Common\Collections\ArrayCollection();     }      /**      * Get departments      *      * @return Doctrine\Common\Collections\Collection       */     public function getDepartments()     {         return $this->departments;     } }   public function showAction($slug) {     $em = $this->getDoctrine()->getEntityManager();     $entity = $em->getRepository('UfscarDfmcOrgBundle:Department')->findOneBySlug($slug);      return array(         'entity' => $entity,         'newsItems' => $entity->getNewsItems(), # enumerating over this gives the error     ); } 
 at ErrorHandler ->handle ('8', 'Undefined index: newsItems', '/.../vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php', '807', array('assoc' => array('fieldName' => 'newsItems', 'joinTable' => array(), 'targetEntity' => 'UfscarDfmc\OrgBundle\Entity\NewsItem', 'mappedBy' => 'newsItems', 'inversedBy' => null, 'cascade' => array(), 'fetch' => '2', 'type' => '8', 'isOwningSide' => false, 'sourceEntity' => 'UfscarDfmc\OrgBundle\Entity\Department', 'isCascadeRemove' => false, 'isCascadePersist' => false, 'isCascadeRefresh' => false, 'isCascadeMerge' => false, 'isCascadeDetach' => false), 'sourceEntity' => object(Department), 'offset' => null, 'limit' => null, 'criteria' => array(), 'sourceClass' => object(ClassMetadata)))  in /.../vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php at line 807    at BasicEntityPersister ->getManyToManyStatement (array('fieldName' => 'newsItems', 'joinTable' => array(), 'targetEntity' => 'UfscarDfmc\OrgBundle\Entity\NewsItem', 'mappedBy' => 'newsItems', 'inversedBy' => null, 'cascade' => array(), 'fetch' => '2', 'type' => '8', 'isOwningSide' => false, 'sourceEntity' => 'UfscarDfmc\OrgBundle\Entity\Department', 'isCascadeRemove' => false, 'isCascadePersist' => false, 'isCascadeRefresh' => false, 'isCascadeMerge' => false, 'isCascadeDetach' => false), object(Department))  in /.../vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php at line 778    at BasicEntityPersister ->loadManyToManyCollection (array('fieldName' => 'newsItems', 'joinTable' => array(), 'targetEntity' => 'UfscarDfmc\OrgBundle\Entity\NewsItem', 'mappedBy' => 'newsItems', 'inversedBy' => null, 'cascade' => array(), 'fetch' => '2', 'type' => '8', 'isOwningSide' => false, 'sourceEntity' => 'UfscarDfmc\OrgBundle\Entity\Department', 'isCascadeRemove' => false, 'isCascadePersist' => false, 'isCascadeRefresh' => false, 'isCascadeMerge' => false, 'isCascadeDetach' => false), object(Department), object(PersistentCollection))  in /.../vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php at line 2088     at UnitOfWork ->loadCollection (object(PersistentCollection))  in /.../vendor/doctrine/lib/Doctrine/ORM/PersistentCollection.php at line 207     at PersistentCollection ->initialize ()  in /.../vendor/doctrine/lib/Doctrine/ORM/PersistentCollection.php at line 474     at PersistentCollection ->count ()  in at line      at count (object(PersistentCollection))  in /.../src/UfscarDfmc/OrgBundle/Controller/DepartmentController.php at line 53     at DepartmentController ->showAction ('graduacao')  in at line 
like image 304
Jan Avatar asked Sep 12 '11 12:09

Jan


1 Answers

I'm having the same trouble, and the answers on StackOverflow while correct dont go deep enough. I found in one of the Doctrine jira issues:

If you run

doctrine:schema:validate 

then it will tell you what the problem is.

like image 131
Bae Avatar answered Oct 08 '22 17:10

Bae