我有三种型号: 项目, 用户, ProjectsUser。 ProjectsUser表用于Project和的HABTM关系 用户。 这是Project模型的remove()方法:
function remove($project_id, $user_id)
{
/*
* Проверяем, относится ли выбранный проект к пользователю
*/
// $data = $this->read('', $project_id);
//
// if($data['User'][0]['id'] != $user_id)
// {
// return false;
// }
/*
* Если проект принадлежит пользователю, то удалить его
*/
$result = $this->delete($project_id);
if(!$result)
{
return false;
}
return true;
}
和Projects控制器的remove()方法:
function remove($project_id)
{
/*
* Пробуем удалить проект
*/
$user_id = $this->Session->read('Auth.User.id');
$result = $this->Project->remove($project_id, $user_id);
/*
* Если возникли ошибки, то отправить их в буфер сообщений
о результате операций
*/
if(!$result)
{
$this->Session->setFlash('Возникли проблемы при
удалении проекта, попробуйте позже');
$this->redirect(array(
'controller' => 'projects',
'action' => 'index',
));
}
$this->Session->setFlash('Проект успешно удален');
// $this->redirect(array(
// 'controller' => 'projects',
// 'action' => 'index',
// ));
}
所以,在调试时我发现Cake为delete()做了两个查询
方法:通过project_id从项目表中删除项目和
下一个:
DELETE FROM projects_users
WHERE projects_users
。user_id
= 4
这意味着如果用户有两个Project,那么在查询完所有关系之后
在users_users表中,user_id将被删除。
我该如何解决这个问题以及为什么Cake会通过user_id从projects_users中删除
不是通过project_id?
答案 0 :(得分:1)
CakePHP默认情况下会删除它,这意味着它会尝试删除您尝试删除的记录的所有相关数据。
要防止出现此问题,请将产品型号中的行更改为:
$result = $this->delete($project_id, false);
另外,正如@deceze所提到的,$ this-> delete()将返回true / false,具体取决于删除是否成功,因此将整个函数设置为是安全的:
function remove($project_id, $user_id)
{
// do any checks for $user_id here...
// ...
$result = $this->delete($project_id, false);
return $result;
}
有关删除()的更多信息,请访问:http://book.cakephp.org/view/1036/delete