2

ビューとコントローラーの関係にこの問題があります。これはコントローラーです:

<?php
class AnswersController extends AppController {
    public $helpers = array('Html', 'Form', 'Session');
    public $components = array('Session');

    public function add() {

        $customer_id = $this->params['url']['customer_id'];
        $question_set_id = $this->params['url']['question_set_id'];
        $order_value = $this->params['url']['order_value'];

        $possible_answer_model = ClassRegistry::init('PossibleAnswer');
        $question_model = ClassRegistry::init('Question');
        $order_model = ClassRegistry::init('Order');

        $order = $order_model -> find('first', array(
        'Order.question_set_id' => $question_set_id,
        'Order.value' => $order_value));

        $question = $question_model -> find('first', array(
        'Question.id' => $order['Order']['question_id']));

        $this -> set('question', $question);

        if ($question['Question']['kind'] != "o") {
            $this -> set('possible_answers', $possible_answer_model -> find('all', array(
            'PossibleAnswer.question_id' => $question['Question']['id'])));
        }

        $this->Session->setFlash($question['Question']['content']);
    }
}

適切な質問とpossible_answers(クエリ出力を見ることができます)を取得していますが、ビューには常に同じ質問(アクションに渡すquestion_set_idとorder_valueに関係なく)とすべてのpossible_answers(実際にあるものだけでなく)が表示されます質問に関連して、常にそれ自体を示すこの質問でさえ)。クエリの出力は正しいので、ビューにデータを渡す際に問題が発生する必要があると思います。とにかく、ビューは次のようになります。

<!-- File: /app/View/Answers/add.ctp -->

<?php
if ($question['Question']['kind'] == 'o') {
    echo $this->Form->create('PossibleAnswer');
    echo $this->Form->input('content', array(
    'rows' => '3', 'label' => 'Miejsce na twoją odpowiedź:'));
    echo $this->Form->input('PossibleAnswer', array(
    'question_id' => $question['Question']['id']));
    echo $this->Form->end('Dalej');
}
else {
    echo $this->Form->create('Answer');
    foreach ($possible_answers as $possible_answer) {
        echo '<input name="'
        .'possible_answers'
        .'" id="'
        .$possible_answer['PossibleAnswer']['id']
        .'" value="'
        .$possible_answer['PossibleAnswer']['id']
        .'" type="radio">';
        echo '<label for="'
        .$possible_answer['PossibleAnswer']['id']
        .'">'
        .$possible_answer['PossibleAnswer']['content']
        .'</label><br />';
    }
    echo $this->Form->end('Dalej');
}
?>

クエリ出力は次のようになります。

1SELECT OrderidOrderquestion_idOrderquestion_set_idOrdervalueQuestionidQuestioncontentQuestioncompany_idQuestionkindQuestionSetidQuestionSetnameQuestionSetcompany_idFROM mentor11orders左のOrder参加者としてmentor11questionsAS QuestionON(Orderquestion_id= Questionid)LEFTJOIN mentor11question_setsAS QuestionSetON(Orderquestion_set_id= QuestionSetid)WHERE 1 = 1 LIMIT 1

(影響を受ける1、行数1、25を取りました)

2SELECT QuestionidQuestioncontentQuestioncompany_idQuestionkindCompanyidCompanytrader_idCompanynameFROM mentor11questions左のQuestion参加者としてmentor11companiesAS CompanyON(Questioncompany_id= Companyid)WHERE 1 = 1 LIMIT 1

(影響を受ける1、行数1、49を取りました)

3SELECT OrderidOrderquestion_idOrderquestion_set_idOrdervalueFROM mentor11ordersASWHERE 。Order_ =(1)Orderquestion_id

(影響を受ける1、行数1、28を取りました)

4SELECT PossibleAnsweridPossibleAnswercontentPossibleAnswerquestion_idFROM mentor11possible_answersASWHERE 。PossibleAnswer_ =(1)PossibleAnswerquestion_id

(影響を受けた2、数行2、35を取った)

5SELECT PossibleAnsweridPossibleAnswercontentPossibleAnswerquestion_idFROM mentor11possible_answersAS PossibleAnswerWHERE 1 = 1

(影響を受ける5、行数5、23を取りました)

ご覧のとおり、4番目のクエリは2つの可能な回答を返しますが、ビューには5つが含まれています(現時点ではすべてです)。 見る

最初は、5番目のクエリ(すべてのpossible_answersを返す)が4番目のクエリを何らかの形で「削除」しているのではないかと思いました。この5番目のクエリがどのように呼び出されたかはまだわかりません(必要ありません。そのようなクエリを呼び出すコードは表示されません)が、「my」$possible_answersを$possible_answerzに変更して作成しました。異なる-それは機能しませんでしたが、機能したとしても:$questionが常に同じである理由を説明しません...

任意のヒント?

編集:私が値をフラッシュするとき-それらは正しいです...

4

1 に答える 1

1

これを試して:

$order = $order_model -> find('first', array(
    'conditions' => array(
        'Order.question_set_id' => $question_set_id,
        'Order.value' => $order_value)
    )
);

次に、「条件」キーを他の配列に追加します

于 2012-07-11T20:01:23.060 に答える