如何在cakephp中的表中选择每个项目?

时间:2013-05-14 08:30:19

标签: cakephp pagination cakephp-2.3

这是我的选择表

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个问题。怎么做?你的帮助会很大appreciated.Thanks

 $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);

有人请帮助我。!!我不知道该怎么做,我一周就坚持住了这个......

3 个答案:

答案 0 :(得分: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)
    ));

让我知道我是否可以帮助你更多

答案 1 :(得分:0)

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

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

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

    $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));
    

注意:如果广播标签显示的是ids而不是内容,则您必须更改displayField个选项。

答案 2 :(得分: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);

}