2010-12-15 49 views
0

我有三種模式: 項目, 用戶, ProjectsUser。 ProjectsUser表用於項目和 用戶之間的HABTM關係。 這是刪除()項目模型的方法:delete()方法的錯誤行爲

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', 
//   )); 
     } 

所以,在調試時我發現,蛋糕做了刪除兩個查詢() 方法:從project_id項目表中刪除項目 下一步: DELETE FROM projects_users WHERE projects_usersuser_id = 4 這意味着如果用戶有兩個Project,那麼在查詢所有關係 之後,projects_users表中的user_id將被刪除。 我該如何解決這個問題,爲什麼Cake沒有通過project_id從user_id 刪除projects_users?

+2

你能後的用戶和項目模型關聯代碼。 – Leo 2010-12-15 18:40:17

+2

請使用'return $ this-> delete($ project_id);'而不是那裏多餘的6行構造。 :) – deceze 2010-12-16 01:45:00

回答

1

CakePHP默認情況下會刪除它,這意味着它會嘗試刪除您嘗試刪除的記錄的所有相關數據。

爲了防止這種現象,在產品型號更改行:

$result = $this->delete($project_id, false); 

而且,@deceze提到,$這個 - >刪除()將返回真/假取決於的成功刪除,所以它是安全的,有你的整個功能是:在刪除

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