我正在使用 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 个键。
顺便说一句,我希望我的实体有一个数组集合,其中包含与其相关的所有子实体,并按它们所在的子实体的类型进行索引。正如我所说,它在第一步工作正常,但是当我从实体中检索 arrayCollection 时,它丢失了所有的键。我在检索它之后从它自己的实体中做了一个'var_dump()',并且数组键也是0到N。
在此先感谢,干杯。
已解决:看起来我检索的只是一个新形成的数组,这就是我丢失的密钥的原因。