2012-09-04 2 views
1

cakephp를 사용하기 시작했으나 이제는 해결할 수없는 문제가 발생했습니다. ,CakePhp는 새로운 데이터를 삽입하는 대신 업데이트합니다

운동 hasMany의이 학생, hasMany의 포인트를 포인트,

가 지금은 모든 운동에 대한 포인트 데이터 세트가있는 경우 studentsController에서 확인 할 :

나는 관련이있는 다음 모델 관계를 가지고있다 그리고 새 것을 삽입하지 않으면.

포인트 데이터 세트없이 시작하면이 함수는 첫 번째 연습에 대한 새 Point 데이터 세트를 추가하지만 이후에는 새 포인트 데이터 세트 대신에이 데이터 세트의 erxercise_id 만 업데이트합니다.

public function correct($id = null) { 
    $this->Student->id = $id; 
    $this->Student->recursive = 2; 
    if ($this->request->is('get')) { 
     $data = $this->Student->Exam->Exercise->find('all'); 
     foreach($data as $exercise) 
     { 
      $exerciseID = $exercise['Exercise']['id']; 
      $this->Student->Point->recursive = 0; 
      $foundPoints = $this->Student->Point->find('all', array('conditions' => array('exercise_id' => $exerciseID))); 
      if($foundPoints == null) 
      { 
       $emptyPoints = array ('Point' => array(
        'exercise_id' => $exerciseID, 
        'student_id' => $id 
        ) 
       ); 
       $this->Student->Point->save($emptyPoints); 
      } 
      else{ 
      } 
     } 

    } 
    else //POST 
    { 

    } 
} 

답변

2

당신이) (이 같은 방법을 만들어 사용하는 데이터를 삽입 할 수있는 경우 :

는 컨트롤러의 기능은 다음과 같습니다이 라인과 함께,이 내용은 예입니다 을 당신은 때마다 A를 생성 데이터베이스에 새 레코드 및 저장 데이터

$this->Student->Point->create(); 
$this->Student->Point->save($emptyPoints); 
+0

안녕하세요, 이건 내 문제를 해결하기 위해 보이지만 난 여전히 CakePHP의 시도는 다를 업데이트하는 이유를 이해 해달라고 find가 자동으로 새로운 것을 삽입하는 대신에 리턴 할 수없는 taset – Thorsten

+0

이 모드에서 생성되므로 모든 동작을 제어 할 수있는 매우 입자 시스템입니다. 새 레코드를 만들지 않으면 레코드를 만들지 않습니다. 레코드를 uodate해야한다면 id를 설정하고 save() 메소드를 사용해야한다. 이 방법은 매번 새로운 레코드를 만드는 방법입니다() –

+0

난 그냥 내가 항상 새로운 하나를 만들 것입니다 ID를 설정하면 내가 잘못 입증 된 것 같아 – Thorsten

0
$this->Student->Point->id = ''; 
$this->Student->Point->save($emptyPoints); 
or 

$this->Student->Point->saveAll($emptyPoints); 
+0

점 모델을 저장하기 만해도 학생 ID는 중요하지 않으며 point-> id는 설정되지 않았습니다. – Thorsten

관련 문제