我正在使用Doctrine2处理Symfony2。我的问题是,当我用键保存数组时,当我检索它们时,键是通常的0到n数组索引键,而不是我放入的键。
这是我的实体:
/**
* @var array
* @ORM\OneToMany(targetEntity="SubEntity", mappedBy="idEntity", cascade={"persist"}, indexBy="idSubEntity")
*/
protected $arraySubEntities;
/**
* @param array() $subEntitiesArray Simple array with "SubEntity" objects
*
*/
public function __construct($subEntitiesArray)
{
$this->arraySubEntities = new ArrayCollection;
foreach ($subEntitiesArray as $subEntity){
$subEntity->setIdEntity($this);
$this->addArraySubEntities($subEntity->getIdSubEntityType()->getId(), $subEntity);
}
public function addArraySubEntities($key, \project\Entity\SubEntityBD $subEntity)
{
$this->arraySubEntities->set($key, $subEntity);
return $this;
}
public function getArraySubEntities()
{
return $this->arraySubEntities;
}
这是“保存”部分:
$subEntityTypes = $this->em->getRepository('projectBundle:SubEntityType')->findAll();
$subEntitiesArray = array();
foreach ($subEntityTypes as $subEntityType) {
$subEntitiesArray[] = new SubEntity($subEntityType);
}
$entity = new Entity($subEntitiesArray);
var_dump($entity);
最后的'var_dump()'显示我的实体有正确的键,正确的类,一切都是正确的。
问题:
$entity = $this->em->getRepository('projectBundle:Entity')->find($idEntity);
$subEntitiesArray = $entity->getArraySubEntities();
var_dump($subEntitiesArray);
最后一个'var_dump()'显示相同的数组,但是有0到N个键。
顺便说一句,我希望我的实体拥有一个数组集合,其中包含与之相关的所有子实体,并通过它们所属的subEntity类型进行索引。正如我所说,它在第一步工作正常,但是当我从实体中检索arrayCollection时它已经丢失了所有它的键。我在检索它之后从它自己的实体做了一个'var_dump()',数组键也是0到N.
提前致谢, 欢呼声。
解决:看起来我检索的只是一个新形成的数组,这就是为什么我的钥匙丢失了。