2013-06-25 23 views
7

Doctrine ORM ile bir ArrayCollection (2.3, PHP> 5.4) kullandığımda ve nesne değerlerini koleksiyondaki bir anahtarla ilişkilendirdiğinizde (set yöntemini kullanırken olduğu gibi), değerler doğru şekilde depolanır. veritabanında. Ancak, koleksiyonun varlıktan alınmasını istediğimde, anahtarlar alınmıyor ve bunun yerine sayısal bir dizin kullanıyorlar. ÖrneğinDoctrine - Store ArrayCollection tuşları

, şu dersleri varsa:

/** @Entity */ 
class MyEntity 
{ 
    /** @OneToMany(targetEntity="MyOtherEntity", mappedBy="mainEntity") */ 
    private $myArray; 

    public function __construct() 
    { 
     $this->myArray = new ArrayCollection(); 
    } 

    public function addOtherEntity($key, $value) 
    { 
     $this->myArray->set($key, $value); 
    } 

    ... 
} 

/** @Entity */ 
class MyOtherEntity 
{ 
    /** @ManyToOne(targetEntity="MyEntity", inversedBy="myArray") */ 
    private $mainEntity; 
    ... 
} 

set yöntem düzgün çalışır, ancak ben $myArray bilgilere anahtarlarını almak zaman gitmiş.

ORM'yi anahtarların doğru şekilde hatırlamasını nasıl sağlayabilirim? Önceden teşekkür ederim.

cevap

5

Bu şu şekilde çözülür: düzgün anahtarını saklayabilirsiniz böylece Ayrıca db şemada MyOtherTable_Key ihtiyaç

/** @Entity */ 
class MyEntity 
{ 
    /** @OneToMany(targetEntity="MyOtherEntity", mappedBy="mainEntity", indexBy="key") */ 
    private $myArray; 

    public function __construct() 
    { 
     $this->myArray = new ArrayCollection(); 
    } 

    public function addOtherEntity($key, $value) 
    { 
     $this->myArray->set($key, $value); 
    } 

    ... 
} 

/** @Entity */ 
class MyOtherEntity 
{ 
    /** @ManyToOne(targetEntity="MyEntity", inversedBy="myArray") */ 
    private $mainEntity; 

    /** @Column(name="MyOtherTable_Key", type="string", unique=true, length=50) 
    private $key; 
    ... 
} 

.

Nesne anahtarını her zaman özellik olarak ayarlamayı unutmayın. Bunu yapmanın bir yolu, kurucudaki anahtarı bildirmektir.

public function __construct($key) 
{ 
    $this->key = $key; 
} 
+0

Yanıtın anahtarlanması için çözüm budur. –

+0

http://doctrine-orm.readthedocs.org/en/latest/tutorials/working-with-indexed-associations.html –

+0

Hangi yanıtı bekleyin? Sorgu bir? –