我有一个问题,现在我在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添加到表中。任何想法为什么会这样?
感谢您提前的帮助。
答案 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()