Cakephp delete()方法的行为不正确
我有三种型号: 项目 用户, 投影仪。 ProjectsUser表用于项目和项目之间的HABTM关系 用户。 这是项目模型的remove()方法:Cakephp delete()方法的行为不正确,cakephp,has-and-belongs-to-many,Cakephp,Has And Belongs To Many,我有三种型号: 项目 用户, 投影仪。 ProjectsUser表用于项目和项目之间的HABTM关系 用户。 这是项目模型的remove()方法: function remove($project_id, $user_id) { /* * Проверяем, относится ли выбранный проект к пользователю */ // $data = $this->read
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;
}
和项目控制器的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()进行了两次查询
方法:从项目表和
下一步:
从projects\u users
中删除,其中projects\u users
user\u id
=4
这意味着,若用户有两个项目,那个么在查询完所有关系之后
将删除项目中用户id的用户表。
如何修复此问题,以及为什么按用户id从项目用户中删除Cake
不是按项目id?默认情况下,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;
}
关于delete()的更多信息,请点击这里:您可以发布用户和项目的模型关联代码。请使用
返回$this->delete($Project\u id)代码>而不是冗余的6行结构。:)