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 個のキーがあります。
ところで、私のエンティティには、関連するすべての subEntities を含む配列コレクションがあり、subEntity のタイプによってインデックス付けされる必要があります。私が言ったように、最初のステップでは問題なく動作しますが、エンティティから arrayCollection を取得すると、すべてのキーが失われます。エンティティを取得した後、エンティティ自体から「var_dump()」を実行しましたが、配列キーも0からNです。
前もってありがとう、乾杯。
解決済み: 私が取得したのは、新しく形成された配列であるように見えます。そのため、私が持っていたキーが失われました。