2012-07-11 94 views
2

我有我的视图控制器关系的这个问题。这是控制器:CakePHP并将变量从控制器发送到视图

<?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'); 
} 
?> 

和查询输出是这样的:

1选择OrderidOrderquestion_idOrderquestion_set_idOrdervalueQuestionidQuestioncontentQuestioncompany_idQuestionkindQuestionSetidQuestionSetnameQuestionSetcompany_idmentor11orders AS Order LEFT JOIN mentor11。 (Orderquestion_id = Questionid)LEFT JOIN mentor11question_sets AS QuestionSet ON(Orderquestion_set_id = QuestionSetid)其中1 = 1 LIMIT 1

(受影响1,NUM。行1,耗时25)

2 SELECT QuestionidQuestioncontentQuestioncompany_idQuestionkindCompanyidCompanytrader_idCompanynamementor11questions AS Question LEFT JOIN mentor11companies AS Company ON(Questioncompany_id = Companyid)其中1 = 1 LIMIT 1

(受影响1,NUM。行1,把49)

3 SELECT OrderidOrderquestion_idOrderquestion_set_idOrdervaluementor11orders AS Order WHERE Orderquestion_id =(1)

(受影响1,NUM。行1,把28)

4 SELECT PossibleAnsweridPossibleAnswercontentPossibleAnswerquestion_idmentor11possible_answers AS PossibleAnswer WHERE PossibleAnswerquestion_id =(1)

(受影响2,货号行2,花了35)

5 SELECT PossibleAnsweridPossibleAnswercontentPossibleAnswerquestion_idmentor11possible_answers AS PossibleAnswer WHERE 1 = 1

(影响5,NUM,行5,耗时23)

正如你可以看到,第四查询返回两个可能的答案,但在视图包含其中五(现在它是所有的人): view

起初我怀疑第五个查询(返回所有possible_answers)是以某种方式“删除”第四个查询;我仍然不知道第5个查询是如何被调用的(我不需要它,并且我看不到任何代码会调用这样的查询),但是我将“我的”$ possible_answers改为$ possible_answerz,只是为了让它不同 - 它没有工作,但即使它做到了:它不能解释为什么$问题总是相同的...

任何提示?

编辑:当我闪的价值观 - 它们是正确的......

回答

1

试试这个:

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

,然后添加 '条件' 键,其他阵列

+0

噢,我的.. 。现在它正在工作,因为它应该。谢谢你,我的救世主! :) – smsware 2012-07-11 20:16:38

相关问题