【发布时间】:2010-12-15 14:56:48
【问题描述】:
我有三个模型: 项目, 用户, 项目用户。 ProjectsUser 表用于 Project 和 用户。 这是 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从projects表中删除project
下一个:
从projects_users 删除projects_users.user_id = 4
这意味着如果用户有两个项目,那么在查询所有关系之后
在 project_users 表中的 user_id 将被删除。
我该如何解决这个问题以及为什么 Cake 按 user_id 从 projects_users 中删除
不是按 project_id 吗?
【问题讨论】:
-
能否贴出用户和项目的模型关联代码。
-
请使用
return $this->delete($project_id);而不是您那里的冗余6行结构。 :)
标签: cakephp has-and-belongs-to-many