【发布时间】:2015-03-13 21:44:58
【问题描述】:
关注this question。在foreach 循环中使用CDbMigration::update() 时出现问题。
此代码无法正常工作:
//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 却很神奇?
【问题讨论】:
标签: yii sql-update database-migration yii-migrations