【发布时间】:2011-11-15 07:48:15
【问题描述】:
我有一个“部门”和“新闻项目”,它们是相关的 m:n。每当我尝试枚举部门的 newsItems,从而触发从数据库中检索时,我都会收到此错误:
在 ErrorHandler -> 句柄 ( '8', '未定义索引:newsItems', '/.../ufscar_symfony/vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php', '807', 大批( '关联' => 数组( 'fieldName' => 'newsItems', 'joinTable' => 数组(), 'targetEntity' => 'UfscarDfmc\OrgBundle\Entity\NewsItem', 'mappedBy' => 'newsItems', 'inversedBy' => 空, '级联' => 数组(), '获取' => '2', '类型' => '8', 'isOwningSide' => 假的, 'sourceEntity' => 'UfscarDfmc\OrgBundle\Entity\Department', 'isCascadeRemove' => 假, 'isCascadePersist' => 假, 'isCascadeRefresh' => 假, 'isCascadeMerge' => 假, 'isCascadeDetach' => 假 ), 'sourceEntity' => 对象(部门), '偏移' => 空, '限制' => 空, '标准' => 数组(), 'sourceClass' => 对象(类元数据) ) )特别奇怪的是,department 中有另一个关系,与另一个 m:n 实体有关系,它可以正常工作,而且映射的设置方式没有区别,我至少检查了 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
);
}
在 ErrorHandler ->handle ('8', '未定义索引: 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)))
在 /.../vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php 第 807 行
在 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))
在 /.../vendor/doctrine/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php 第 778 行
在 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 ))
在 /.../vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php 第 2088 行
在 UnitOfWork ->loadCollection (object(PersistentCollection))
在 /.../vendor/doctrine/lib/Doctrine/ORM/PersistentCollection.php 第 207 行
在 PersistentCollection -> 初始化 ()
在 /.../vendor/doctrine/lib/Doctrine/ORM/PersistentCollection.php 第 474 行
在 PersistentCollection ->count ()
在线上
在计数(对象(PersistentCollection))
在 /.../src/UfscarDfmc/OrgBundle/Controller/DepartmentController.php 第 53 行
在 DepartmentController -> showAction ('graduacao')
在线上
【问题讨论】: