Arrays CakePhp foreach仅保存数组中的最后一个值
我有一个问题,现在我在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
//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