1

这是我的选择表

id | question_id  | content 
 1     1               bee
 2     1               fly
 3     1               dog
 4     2               cat
 5     2               bat
 6     2               wasp

这是我的问题表

id |   content
 1       question1
 2       item2

这就是我所做的。有了这个我可以用它的选择来显示问题..我现在想做的是对它进行分页,更像是每页 1 个问题。如何做到这一点?您的帮助将不胜感激。谢谢

 $options['fields'] = array('questions.id','questions.content');
    $options['joins'] = array(  
            array(
                'table' => 'generated_exam_items',
                'alias' => 'GenExamItems',
                'type' => 'inner',
                'conditions' => array(
                    'GenExamItems.generated_examination_id' => 25
                )
            ),
            array(
                'table' => 'questions',
                'alias' => 'Questions',
                'type' => 'inner',
                'conditions' => array(
                     'Questions.id = GenExamItems.questions_id'
                )
            ),

        );
        $options['conditions']=array('GenExamItems.generated_examination_id' => 25,'Question.id=GenExamItems.questions_id');
$question_detail = $this->Question->find('all',$options);
$this->set('questions',$question_detail);

有人请帮帮我。!!我不知道怎么做,我在这个问题上卡了一个星期..

4

3 回答 3

0

假设您在两个模型上都有正确的关联。

我将在视图中仅显示一个问题的代码。

  • 如果您使用cake 提供的自动方式(阅读“创建表单元素”部分)在您的控制器中,您必须获得选择

    $this->set('choices', $this->Question->Choice->find('list', 
                                   array('conditions'=>
                                        array('question_id'=>$your_question_id))));
    

    在你看来,你必须做

    echo $this->Form->input('choice_id', array('type'=>'radio'));
    

    那应该会自动将选择显示为收音机(不确定您想要什么类型的输入)

  • 如果由于某种原因自动方法不起作用(如果发生这种情况,请务必检查模型的关联),那么您可以传递选项数组(如之前在控制器上显示的那样获取它们)并将其作为参数传递

    echo $this->Form->input('choice_id', array('type'=>'radio', 
                                               'options'=>$choices));
    

注意:如果单选标签显示的是 id 而不是内容,则必须更改选项的displayField

于 2013-05-14T13:51:57.937 回答
0

这就是我所做的。它返回了问题和相应的选择。我希望我能有这个。谢谢。

public function take($id=null) { 
    $this->request->params['named']['page'] = (isset($this->request->params['page'])) ? $this->request->params['page'] : 1;
    $options['fields'] = array('questions.id','questions.content');
        $options['joins'] = array(  
            array(
                'table' => 'generated_exam_items',
                'alias' => 'GenExamItems',
                'type' => 'inner',
                'conditions' => array(
                    'GenExamItems.generated_examination_id' => 40
                )
            ),
            array(
                'table' => 'questions',
                'alias' => 'Questions',
                'type' => 'inner',
                'conditions' => array(
                     'Questions.id = GenExamItems.questions_id'
                )
            ),

        );
        //$options['contains']='Choice';
        $options['conditions']=array('Question.id = GenExamItems.questions_id');
        $options['order']=array('rand(Question.id)');
        $options['limit']=1;
        $this->paginate=$options;
        $data = $this->paginate('Question');
        $this->set('questions',$data);

}
于 2013-05-15T07:39:51.790 回答
0

您可以使用相互关系的模型

因为在这里我只是添加骨架代码,你需要用真实的类名来验证你的实际代码

Question模型中写下这个关系

class Question extends AppModel {
    public $hasMany = array(
        'Choice' => array(
            'className' => 'Choice',
        )
    );

Choice模型中,您可以定义为

class Choice extends AppModel {
    public $belongsTo = 'Question';
}

在控制器中,如果您想通过其选择获取特定问题,您可以编写如下查询

 $question_detail = $this->Question->find('first', array(
        'conditions' => array('Question.id' => $question_id)
    ));

让我知道我是否可以为您提供更多帮助

于 2013-05-14T09:10:46.043 回答