2013-06-25 14 views
7

Doctrine ORM(2.3、PHP> 5.4)でArrayCollectionを使用し、オブジェクト値をコレクション内のキーに関連付けた場合(値がsetメソッドの場合など)、値は正しく格納されますデータベースに格納されます。しかし、エンティティからコレクションを取得する場合、キーは取得されず、数値インデックスが使用されます。例えばDoctrine - ArrayCollectionキーを格納する

、私は以下のクラスがある場合:

/** @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方法が適切に動作しますが、私は情報を取得する際$myArrayのキーがなくなっています。

どのようにしてORMにキーを正しく記憶させるのですか?あらかじめありがとうございます。

答えて

5

これは、以下の方法で解決されています

/** @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; 
    ... 
} 

それが適切にキーを格納できるように、あなたはまた、あなたのDBスキーマにMyOtherTable_Keyを必要としています。

必ずオブジェクトキーをプロパティに設定してください。これを行う1つの方法は、コンストラクタでキーを宣言することです。

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

これは、応答を取得するための解決策ですか。 –

+0

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

+0

応答を待ちますか?クエリ1?ひどく言われた –

関連する問題