Doctrine-хранить ключи ArrayCollection

всякий раз, когда я использую ArrayCollection с доктриной ORM (2.3, PHP > 5.4) и связываю значения объекта с ключом в коллекции (например, при использовании set метод), значения правильно сохраняются в базе данных. Но когда я хочу получить коллекцию из сущности, ключи не извлекаются, а вместо этого они используют числовой индекс.

например, если у меня есть следующие классы:

/** @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 правильно запомнить ключи? Заранее спасибо.

1 ответов


Это решается следующим образом:

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

также необходимо MyOtherTable_Key в вашей схеме БД, чтобы он мог правильно хранить ключ.

не забудьте установить ключ объект в собственность. Один из способов сделать это-объявить ключ в конструкторе.

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