2011-09-12 9 views
19

मेरे पास एक 'विभाग' और 'न्यूजइटम' है, जो संबंधित हैं एम: एन।सिद्धांत पर अनिर्धारित सूचकांक एम: एन संबंध

 
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) 
) 
) 

क्या विशेष रूप से अजीब है, एक और मीटर विभाग में एक और संबंध है कि वहाँ,: जब भी मैं एक विभाग की newsItems से अधिक की गणना करने में, इस प्रकार डाटाबेस से पुनः प्राप्ति के ट्रिगर की कोशिश, मैं इस त्रुटि मिलती है n इकाई, यह सिर्फ काम करता है, और मैपिंग कैसे स्थापित किया जाता है, इसमें कोई फर्क नहीं पड़ता है, मैंने कम से कम 10 बार चेक किया है।

वर्गों और पूर्ण स्टैकट्रेस: ​​

http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html#many-to-many-bidirectional

यह आप लगता है:

 /** 
* @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 

उत्तर

20

अगर मैं सही हूँ ...

वर्ग विभाग में आपका mappedBy newsItems की जगह में NewsItem वर्ग की संपत्ति, अपने मामले विभागों में होना चाहिए।

+3

100% सही! कभी-कभी ऐसा लगता है कि 10 गुना पर्याप्त नहीं है :) बहुत बहुत धन्यवाद! – Jan

+0

मैंने दो बार एक ही गलती की है। यह भूलना आसान है कि आपको संबंधित वर्ग की संपत्ति की आवश्यकता है :) – pderaaij

0

आप शायद अपने समारोह अंकन में कुछ .. याद कर रहे हैं इस पर एक नजर है @ जॉइनटेबल नोटेशन गायब हैं - हो सकता है कि मालिक और उलटा पक्ष उलटा करने की कोशिश करें?

+0

नोट: pderaaij का जवाब मेरी तुलना में अधिक चालाक लगता है। :-) – geezmo

20

मुझे वही परेशानी हो रही है, और स्टैक ओवरव्लो पर उत्तर सही हैं जबकि सही गहराई से नहीं जाते हैं। मैं Doctrine jira issues में से एक में पाया:

आप

doctrine:schema:validate 

चलाते हैं तो यह आपको बता देंगे कि समस्या क्या है।