this question. Что-то не так, при использовании CDbMigration::update()
внутри цикла foreach
.CDbMigration :: обновление не работает внутри цикла foreach
Этот код не работает правильно:
//This is executed inside Yii migration, so $this is CDbMigration.
foreach($idMap as $menuId=>$pageId)
{
$this->update
(
'menus_items',
array('link'=>'/content/show?id='.$pageId),
array('id = '.$menuId)
);
}
Для каждого элемента в $ IDMAP стоимости $ PageId всегда то же и равна стоимости последний пункт в $ IDMAP массив. Поэтому каждый пункт меню указывает на тот же URL.
Этот код работает как шарм:
foreach($idMap as $menuId=>$pageId)
{
$sql = "UPDATE `menus_items` SET link = '/content/show?id=".$pageId."' WHERE id = ".$menuId."; ";
Yii::app()->db->createCommand($sql)->execute();
}
Для каждого элемента в $ IDMAP стоимости $ PageId всегда отличается и равна стоимости текущего элемента в IDMAP$ массив. Поэтому каждый пункт меню указывает на правильный URL.
То же самое, при выполнении всех операторов в один SQL запрос:
$sql = '';
foreach($idMap as $menuId=>$pageId)
{
$sql .= "UPDATE `menus_items` SET link = '/content/show?id=".$pageId."' WHERE id = ".$menuId."; ";
}
Yii::app()->db->createCommand($sql)->execute();
Опять же, все в порядке.
Почему использование CDbMigration::update()
не удается, а прямое выполнение SQL работает как шарм?