2014-05-18 4 views
0

이 질문은 거절 될 수도 있습니다. 그러나 나는 약간의 질문 및 튜토리얼과 혼동하고있다.cakephp saveAll이 (가) 연관 관계가 작동하지 않음

다음 코드를 사용하여 배열을 저장하려고합니다.

$data = array(
    'name' => 'ques 1', 
    'description' => 'lskjdf sldkfj sdlfkjsd flskdjf sldkfjsd', 
    'objective' => 'jd ldkjf sldkf sldfj sdlfjdlsfsjfl ds', 
    'Question' => array(
     'type' => 'BOOLEAN', 
     'body' => 'slkdjfs dflskdf slkfjsiuwsdjkf sd', 
     'Answer' => array(
      'body' => 'sd fsldkjfs dddd ddd ddd' 
     ), 
    ), 
); 

$this->Questionnaire->create(); 
$this->Questionnaire->saveAll($data); 

이 코드를 실행 한 후 설문지에는 3 가지 질문이 있지만 답변이 없습니다. 단 하나의 질문에만 본문 값이 있습니다.

이것은 내 모델 클래스입니다.

Questionnaire.php

<?php 
App::uses('AppModel', 'Model'); 

/** 
* Questionnaire Model 
*/ 
class Questionnaire extends AppModel { 

    /** 
    * Validation rules 
    * 
    * @var array 
    */ 
    public $validate = array(
     'name' => array(
      'required' => array(
       'rule' => array('notEmpty'), 
       'message' => 'Name is required' 
      ) 
     ), 
     'description' => array(

     ), 
     'objective' => array(

     ), 
    ); 

    public $hasMany = array(
     'Question' => array(
      'className' => 'Question', 
      'foreignKey' => 'questionnairy_id' 
     ), 
    ); 

} 

Question.php

<?php 
App::uses('AppModel', 'Model'); 

/** 
* Question Model 
*/ 
class Question extends AppModel { 

    /** 
    * Validation rules 
    * 
    * @var array 
    */ 
    public $validate = array(
     'type' => array(
      'valid' => array(
       'rule' => array('inList', array(
        BOOLEAN_ANSWER, 
        SINGLE_ANSWER, 
        MULTIPLE_ANSWER, 
       )), 
       'message' => 'Invalide type',     
      ) 
     ), 
     'body' => array(
      'required' => array(
       'rule' => array('notEmpty'), 
       'message' => 'Question is required' 
      ) 
     ),  
    ); 

    public $belongsTo = array(
     'Questionnaire' => array(
      'className' => 'Questionnaire', 
      'foreignKey' => 'questionnaire_id' 
     ), 
    ); 

    public $hasMany = array(
     'Answer' => array(
      'className' => 'Answer', 
      'foreignKey' => 'question_id' 
     ), 
    ); 

} 

Answer.php는

<?php 
App::uses('AppModel', 'Model'); 

/** 
* Answer Model 
*/ 
class Answer extends AppModel { 

    /** 
    * Validation rules 
    * 
    * @var array 
    */ 
    public $validate = array(
     'body' => array(
      'required' => array(
       'rule' => array('notEmpty'), 
       'message' => 'Answer is required' 
      ) 
     ),  
    ); 

    public $belongsTo = array(
     'Question' => array(
      'className' => 'Question', 
      'foreignKey' => 'question_id' 
     ), 
    ); 

} 

나는이 배열을 저장하는 올바른 방법을 알아야합니다. 도와주세요.

답변

2

배열을 올바르게 포맷해야합니다. $data 배열은 다음과 같아야합니다 질문 (답변과 동일) 인덱스 배열에 있는지

array(
    'Questionnaire' => array(
    'name' => 'Questionnaire 1' 
), 
    'Question' => array(
    array(
     'type' => 'BOOLEAN', 
     'body' => 'Is Cake sweet?', 
     'Answer' => array(
     array(
      'body' => 'Yes.' 
     ) 
    ) 
    ), 
    array(
     'type' => 'BOOLEAN', 
     'body' => 'Does Cake make things easy and fast?', 
     'Answer' => array(
     array(
      'body' => 'Yes.' 
     ) 
    ) 
    ), 
) 
); 

알 수 있습니다. 그 관계가 hasMany이기 때문입니다. ,

$ this-> Questionnaire-> 시려면 ($를 데이터 : 당신이 저장할 때 계속하는 케이크를 말할해야합니다,

$this->Form->create('Questionnaire'); 
$this->Form->input('Questionnaire.name'); 
$this->Form->input('Question.0.type'); 
$this->Form->input('Question.0.body'); 
$this->Form->input('Question.0.Answer.0.body'); 
$this->Form->input('Question.1.type'); 
$this->Form->input('Question.1.body'); 
$this->Form->input('Question.1.Answer.0.body'); 
$this->Form->end(); 

마지막 :

이 양식은 다음과 같을 것 array ('deep'=> true));

확인 대한 추가 정보를 원하시면 책 :

http://book.cakephp.org/2.0/en/models/saving-your-data.html

+0

덕분에 코드. 데이터 배열 만 필요합니다. 귀하의 배열로 설문지와 질문을 저장할 수 있습니다. 그러나 대답을 구하지는 못합니다. 이슈가 뭐야? –

+2

예. 그것은 깊은 옵션과 함께 작동합니다. 감사합니다 –

+0

플러그인 모델을 사용하는 경우 Controller :: loadModel() 호출 또는 Controller :: $의 PluginName.ModelClass와 같은 참조 모델은 변수를 사용합니다. –