CakePhp foreach仅保存数组中的最后一个值

时间:2015-09-12 15:27:36

标签: arrays loops cakephp foreach

我有一个问题,现在我在CakePhp上使用这个foreach循环,我想在其上添加所有值仍然不在桌面上的尊重用户。为了提供更多上下文,用户有一个菜单。管理员可以选择添加哪一个供用户使用。在下一个代码中,我收到一个带有菜单的数组,这些菜单将被添加为:

//This is what comes on the ['UserMenuAccessibility'] array:
    Array ( [menu_accessibility_id2] => 2 [menu_accessibility_id3] => 3 [menu_accessibility_id4] => 4 [menu_accessibility_id5] => 5 [menu_accessibility_id8] => 8 ) 

我得到了要添加到表中以供用户使用的菜单的ID。如果它们不存在,我会使用下一个代码将菜单添加到表中:

//I check if the array has something cause it can come with no ids.    
if (!(isset($this->request->data['UserMenuAccessibility']))) {
        $this->request->data['UserMenuAccessibility'] = array();
    }

    $UserMenuAccessibility = $this->request->data['UserMenuAccessibility'];

    foreach ($UserMenuAccessibility as $key => $value) {

        $conditions = array(
            'UserMenuAccessibility.menu_accessibility_id' => $value, 
            'UserMenuAccessibility.users_id' => $id
        );

        if ($this->User->UserMenuAccessibility->hasAny($conditions)) {

        }  else {
            $valuemenu['UserMenuAccessibility']['users_id'] = $id;
            $valuemenu['UserMenuAccessibility']['menu_accessibility_id'] = $value;
            if ($this->User->UserMenuAccessibility->save($valuemenu)) {

            } else {
                $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
            }
        }
    }

由于某种原因,数组只保存不在表上的最后一个新ID,而不是其余的。例如,如果我有菜单1和2并且添加3和4,则只有4个添加到表中。出于某种原因,我无法将所有缺少的菜单ID添加到表中。任何想法为什么会这样?

感谢您提前的帮助。

2 个答案:

答案 0 :(得分:4)

看起来您的代码会保存每个项目,但每次调用<head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script> $(function() { $('#test').hover(function() { alert('sub'); }); }); </script> </head> 都会覆盖添加的最后一个条目,因为save()在第一次保存后设置,并将用于后续保存。尝试在每次保存前调用$this->User->UserMenuAccessibility->id以确保模型数据已重置并准备接受新数据: -

$this->User->UserMenuAccessibility->create()

答案 1 :(得分:0)

在cakephp 2.0 $ this-&gt; Model-&gt; create()中创建工作正常。但是如果您使用的是cakephp版本3或更高版本,那么请遵循以下代码

$saveData['itemId']             = 1;

$saveData['qty']                = 2;

$saveData['type']               = '0';

$saveData['status']             = 'active';

$saveData = $this->Model->newEntity($saveData);

$this->Model->save($materialmismatch);

在正常情况下,我们使用patchEntity

$this->Model->patchEntity($saveData, $this->request->data);

它只会保存数组的最后一个值,因此你必须使用带有数据的newEntity()