このコードは問題なく動作します (すべてのデータベース アイテムが期待どおりに更新されます)。
foreach($idMap as $menuId=>$pageId)
{
$sql = "UPDATE `menus_items` SET link = '/content/show?id=".$pageId."' WHERE id = ".$menuId."; ";
$affectedRows = Yii::app()->db->createCommand($sql)->execute();
echo $affectedRows." affected rows\n";
}
ただし、0 affected rows
実行されたクエリごとに出力されます。なんで?
1 つの SQL クエリでステートメントに影響を与える多くの行を実行すると、同じ効果があります。
$sql = '';
foreach($idMap as $menuId=>$pageId)
{
$sql .= "UPDATE `menus_items` SET link = '/content/show?id=".$pageId."' WHERE id = ".$menuId."; ";
}
$affectedRows = Yii::app()->db->createCommand($sql)->execute();
echo $affectedRows." affected rows\n";
私は何が欠けていますか?Docs によると、CDbCommand::execute
実行によって影響を受けた行数が返されるはずです。移行内で使用する場合、この機能は機能しますか?