2

しばらくの間、CakePHP でマルチレベル モデルを保存する方法を見つけようとしてきましたが、解決策が見つからないようです。

私は3つのモデルを持っています。SurveyQuestion、およびChoice

  • Survey hasMany Question -質問は調査に属します

  • 質問には多くの選択肢があります-したがって、選択肢は質問に属します

    • 質問は、そのsurvey_idキーを介して調査にリンクされています。

    • 一方、Choiceは、 question_idキーを介してQuestionにリンクされています。( Surveyとは直接関係ありませんが)

フォームは で作成されます$this->Form->create('Survey')

アプリケーションで、対応する質問とともに調査を保存し、各質問に対応する選択肢を保存する必要があります。

問題は、SurveyモデルとQuestionモデルのみが保存されることです。選択は破棄されます。

私は使用しています$this->saveAssociated($this->request->data, array( 'deep' => true) )

データを表示するために投稿を更新し$_POSTます。

ありがとう、

XTN

4

2 に答える 2

0

モデルは次のようになります。

Survey Model: Survey.php

class Survey extends AppModel {   
    public  $name = 'Survey';   
    public $hasMany = array('Questions' => array(
                                          'className' => 'Question',
                                          'foreignKey' => 'survey_id'
                                                )
                           );
}

Question Model: Question.php

class Question extends AppModel{   
public $name = 'Question';   
public $belongsTo = array(
                        'Survey' => array('className' => 'Survey', 'foreignKey' => 'survey_id'),
                        'Answer' => array('className' => 'Choice', 'foreignKey' => 'answer_id'));
public $hasMany = array('Choices' => array('className' =>  'Choice', 
                                           'foreignKey' => 'question_id'));
}

Choice Model: Choice.php

class Choice extends AppModel
{
public $name = 'Choice';   
public $belongsTo = array('Question' => array('className' => 'Question', 
                                              'foreignKey' => 'question_id'));   
}

うまくいかない場合は、お気軽にお問い合わせください。

于 2012-07-25T05:19:18.890 に答える
0

データを保存する前に、データがこの形式であることを確認する必要があります

あなたのコントローラーで:

$data = array('Survey' => array('id' => 1,'name' => 'test'),
                  'Question' => array(
                                    array('id' => 1,'question' => 'test1','survey_id' => 1,
                                        'Choice' => array(
                                            array('id' => 1,'question_id' => 1,'choice' => 1),
                                            array('id' => 2,'question_id' => 1,'choice' => 2)
                                            )

                                    ),
                                    array('id' => 2,'question' => 'question2','survey_id' => 1,
                                    'Choice' => array(
                                        array('id' => 3,'question_id' => 2,'choice' => 'sd'),
                                        array('id' => 4,'question_id' => 2,'choice' => 'we')
                                        )
                                    )
                                )
                 );
        $this->Survey->create();
        $this->Survey->saveAssociated($data,array('deep'=>true)); 

調査モデル:

public $hasMany = array(
    'Question' => array(
        'className' => 'Question',
        'foreignKey' => 'survey_id',
        'dependent' => false,
    )
         );

質問モデル:

public $belongsTo = array(
    'Survey' => array(
        'className' => 'Survey',
        'foreignKey' => 'survey_id',
    )
);
public $hasMany = array(
    'Choice' => array(
        'className' => 'Choice',
        'foreignKey' => 'question_id',
        'dependent' => false,
    )
);

選択モデル:

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

問題が見つかった場合は通知してください

于 2012-07-25T06:38:45.643 に答える