2017-07-14 17 views
0

私は、両方ともbelongsTo関係を持つExamsQuestionsテーブルを通じてbelongsToMany関係にリンクされているexam_idとquestion_idを持つ関連テーブルを作成しようとしています。_joinDataがCakephp 3のリクエストを正しく更新しない

私はidsを正しく保存できるので、(少なくともいくつかの)関係を正しく作成しましたが、関連テーブルには "questionPoints"フィールドと "isActive"フィールドもありますが、更新する。

私はa run-time request.

を送信するために.jsファイルを使用しかし、私は、コントローラの機能からresponseを取得していたときに、joindataが正しくオブジェクトに設定されていません。

データベースでは、._joinata情報の一部(ids)が適用されても、行はまったく更新されません。私はCakePHPの組み込みのアソシエーションであり、デフォルトでアソシエーションの1レベルが適用されるため、参加していると思います。

ExamsControllerでは、ビューを正しくレンダリングするために、まずビューにデータを送信します。その後、要求データを使用してエンティティにパッチを適用し、エンティティを保存します。

public function take($id) 
{ 
    if ($this->request->is('get')) 
    { 
     $exam = $this->Exams->get($id, [ 
     'contain' => ['ExamTemplates' => ['Questions.Answers']] 
    ]);  
     $users = $this->Exams->Users->find('list', ['limit' => 200]); 
     $examTemplates = $this->Exams->ExamTemplates->find('list', ['limit' => 200]);   
     $this->set(compact('exam', 'users', 'examTemplates')); 
    } 

    if ($this->request->is('post')) { 
     $exam = $this->Exams->get($id, ['contain' => ['Questions']]); 
     $this->autoRender = false; 
     $exam = $this->Exams->patchEntity($exam, $this->request->data); 
     if ($this->Exams->save($exam)) { 
      $response = [ 
       'success' => true, 
       'message' => __("exam updated"), 
       'this' => $this->request->data, 
      ]; 
      $exam_id = $_POST['id']; 
      $this->Flash->success(__('The exam has been updated.')); 
     } else { 

      $response = [ 
       'success' => false, 
       'error' => $exam->errors(), 
       'request' => $this->request->data, 
       'message' => __("Error creating template") 
      ]; 
     } 
     $this->response->body(json_encode($response)); 
    } 
} 

ありがとうございます。

答えて

0

問題を修正しましたが、修正が最も正しい方法で行われたかどうかはわかりません。

AJAX呼び出しでフィールドを更新する代わりに、_joinData更新を要求データに基づいてコントローラで実行するように変更しました。

私は新しい_joinDataを新しい配列として宣言し、自動的に追加されなかったフィールドを与えました。 CakePHPがオートコンプリートするフィールドを手作業で与えても、それも更新されないということに注意してください。

関連する問題