Обмен двух элементов в Doctrine ArrayColection

У меня есть документ «Операция» в проекте symfony2, который содержит встроенную коллекцию других документов «Команды». Я пытаюсь написать действие, которое меняет положение двух команд. Я пытался рассматривать коллекцию как обычный массив PHP, но поведение было не таким, как ожидалось.

class Operation
{
...
/**
* The sequence of commands
* @MongoDB\EmbedMany(targetDocument="Command")
*/
protected $commands;

public function __construct()
{
$this->commands  = new \Doctrine\Common\Collections\ArrayCollection();
$this->fallbacks = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
*
*/
public function swapCommands($index1, $index2)
{
$temp = $this->commands[$index1];
$this->commands[$index1] = $this->commands[$index2];
$this->commands[$index2] = $temp;
}
...
}

Когда я swapCommands()затронутые элементы попадают в нижнюю часть коллекции Array. Например, скажем, у меня есть команды ['cd', 'ls', touch', 'mv'], Если я пытаюсь поменять местами индексы 0 и 1, я получу [touch', 'mv', 'ls', 'cd'], Как я могу поменять два элемента в коллекции массивов? Моим последним средством будет вручную пересмотреть коллекцию и add() каждый элемент …

0

Решение

Лучший способ, который я нашел, чтобы сделать эту работу, но не самый элегантный:

public function swapCommands($index1, $index2)
{
$arr  = $this->commands->toArray();
$temp = $arr[$index1];
$arr[$index1] = $arr[$index2];
$arr[$index2] = $temp;

$this->commands  = new \Doctrine\Common\Collections\ArrayCollection();
for ($i=0; $i < count($arr); $i++) {
$this->addCommand($arr[$i]);
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]