Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp delete()方法的行为不正确_Cakephp_Has And Belongs To Many - Fatal编程技术网

Cakephp delete()方法的行为不正确

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

我有三种型号: 项目 用户, 投影仪。 ProjectsUser表用于项目和项目之间的HABTM关系 用户。 这是项目模型的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; 
    } 
和项目控制器的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行结构。:)