2015-03-13 74 views
0

这一定是丑陋的东西显而易见,但我被困在这,并且无法解决它在过去的两个小时。在foreach循环中奇怪的变量覆盖

我有这样一段代码:

foreach($idMap as $menuId=>$pageId) 
{ 
    echo('$this->update("menus_items", SET "link = /content/show?id='.$pageId.'" WHERE id = '.$menuId.');'."\n"); 

    $this->update 
    (
     'menus_items', 
     array('link'=>'/content/show?id='.$pageId), 
     array('id = '.$menuId) 
    ); 
} 

echo部分工作正常($pageId是对每个项目,从$idMap采取不同),而Yii中的CDbCommand::update()得到光,并有$pageId等于它是最后一个值所有循环迭代。

换句话说,如果我有20个菜单项,并在结果集中最后一个项目有pageId = 18,然后使用CDbCommand::update()的时候,我得到设置为最后一个值都菜单项。

这里肯定有一些变量覆盖,但是我在过去的两个小时里找不到它,特别是,echo只在一行以上显示了很好的效果。有人可以帮助这里。

+1

我们看不到'$ this-> update'的作用。我看不到任何覆盖。该错误必须在其他地方。 – steven 2015-03-13 16:41:06

+0

'$ this'是什么?的CActiveRecord? – hamed 2015-03-13 16:51:35

+0

@steven感谢您尝试提供帮助。看来,这个问题必定与Yii有关。我会在他们的论坛上提问。如果我在那里得到一些有价值的答案,我会考虑在这里重新发布它们。感谢双重检查并向我保证,我不会错过某些愚蠢的东西。 – trejder 2015-03-13 19:20:40

回答

2

猜测,但$this->update()期望单个数组的绑定参数?

$this->update 
    (
     'menus_items', 
     array(
      'link' => '/content/show?id='.$pageId, 
      'id' => $menuId 
     ) 
    ); 
+0

感谢您尝试提供帮助。看来,这个问题必定与Yii有关。我会在他们的论坛上提问。如果我在那里得到一些有价值的答案,我会考虑在这里重新发布它们。感谢双重检查并向我保证,我不会错过某些愚蠢的东西。 – trejder 2015-03-13 19:20:26