2011-09-12 3 views
19

私は 'department'と 'newsItem'を持っています。これはm:nに関連しています。 、n個のエンティティ:別のメートルに、部門内の別の関係があること、である特に奇妙である何doctrine m:nリレーションに関する未定義インデックス

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

:私は、このようにDBから検索をトリガする、部門ののNewsItemの上に列挙しようとするたびに、私はこのエラーを取得しますそれだけで動作し、マッピングがどのように設定されているかに違いはありません。私は少なくとも10回チェックしました。

クラスと完全なスタックトレース:あなたはおそらく、あなたの関数の表記で何かが欠けている

 /** 
* @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はのNewsItemの代わりにあなたのケースの部門では、NewsItemのクラスのプロパティでなければなりません。

+3

100%正しい!時には10回は十分ではないようです:)ありがとう! – Jan

+0

私は同じ間違いを数回しました。関連するクラスのプロパティが必要であることを忘れるのは簡単です:) – pderaaij

20

私は同じ問題を抱えています。また、StackOverflowの回答は正しいですが、十分に深くはありません。私はDoctrine jira issuesの1で見つかった:

あなたは

doctrine:schema:validate 

を実行した場合、それは問題が何であるかを教えてくれます。

関連する問題