2010-12-15 23 views
0

私は3つのモデルを持っています: Project、 User、 ProjectsUser。 ProjectsUserテーブルは、Projectと Userの間のHABTM関係に使用されます。私はケーキを削除するための2つのクエリを作ることが判明デバッグ中)(、 delete()メソッドの動作が正しくありません

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

ので:)

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; 
    } 

と削除(プロジェクトのコントローラの方法: これは、プロジェクトモデルの方法)(削除されメソッド:プロジェクトテーブルからproject_idでプロジェクトを削除し、 を次に削除します。 projects_users WHERE projects_usersから削除します。 user_id = 4 これは、Userが2つのプロジェクトを持ち、クエリ後にuser_idのprojects_usersテーブル内のすべての関係 が削除されることを意味します。 これを修正するにはどうすればよいですか?Cakeがproject_usersからuser_idで削除する理由 project_idではなくですか?

+2

あなたはユーザー&プロジェクトのモデル関連のコードを投稿することができます。 – Leo

+2

あなたが持っているその冗長な6行構成の代わりに 'return $ this-> delete($ project_id);'を使用してください。 :) – deceze

答えて

1

CakePHPはデフォルトで削除をカスケードします。つまり、削除しようとしているすべての関連データを削除しようとします。 @decezeは、ます$ this->削除()はの成功に応じて、真/偽を返します述べたように、また

$result = $this->delete($project_id, 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

関連する問題