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

Arrays CakePhp foreach仅保存数组中的最后一个值,arrays,loops,cakephp,foreach,Arrays,Loops,Cakephp,Foreach,我有一个问题,现在我在CakePhp上使用这个foreach循环,我想在这个循环上为用户添加所有仍然不在表中的值。为了提供更多的上下文,用户有一个菜单。管理员可以选择添加哪一个供用户使用。在下一个代码中,我收到一个带有菜单的数组,这些菜单将按如下方式添加: //This is what comes on the ['UserMenuAccessibility'] array: Array ( [menu_accessibility_id2] => 2 [menu_accessibi

我有一个问题,现在我在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,而不保存其余id。例如,如果我有菜单1和2,并添加3和4,则只有4会添加到表中。由于某些原因,我无法将所有缺少的菜单ID添加到表中。知道为什么会这样吗


感谢advance上的帮助。

看起来您的代码会保存每个项目,但是每次调用
save()
都会覆盖最后添加的条目,因为
$this->User->UserMenuAccessibility->id
是在第一次保存之后设置的,将用于后续保存。尝试在每次保存之前调用
$this->User->UserMenuAccessibility->create()
,以确保模型数据已重置并准备好接受新数据:-

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

看起来您的代码将保存每个项目,但是每次调用
save()
都会覆盖最后添加的条目,因为
$this->User->UserMenuAccessibility->id
是在第一次保存之后设置的,将用于后续保存。尝试在每次保存之前调用
$this->User->UserMenuAccessibility->create()
,以确保模型数据已重置并准备好接受新数据:-

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

在CakePHP2.0$this->Model->create()中,创建工作正常。但是如果您使用的是cakephp版本3或更高版本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);

它只保存数组的最后一个值,因此您必须在cakephp 2.0$this->Model->create()中使用newEntity()和数据。但是如果您使用的是cakephp版本3或更高版本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()

,当然!XD这真的很奇怪,因为我在我构建的另一个站点上有这段代码。而且在那里效果很好。我不知道为什么它在这边不起作用。我非常感谢你指出这一点!它就像一个符咒:当然!XD这真的很奇怪,因为我在我构建的另一个站点上有这段代码。而且在那里效果很好。我不知道为什么它在这边不起作用。我非常感谢你指出这一点!它就像一个符咒:D