1

QuestionCollection我有一个从模型中获取其内容的网格。

在一个专栏中,我想展示集合中的问题。我使用三个模型将问题与集合联系起来:

  1. 问题
  2. QuestionInCollection
  3. 问题集合

也就是说,我想在一个额外的列中显示连接到特定行的内容,该列使用addColumn. 但是如何将此内容插入每一行?

我尝试使用setTemplateand setSource,以及QuestionCollection使用额外的“问题”字段扩展模型。但我无法让它工作。

有任何想法吗?

编辑:这是一个代码示例:

$q=$this->api->db->dsql()->table('questionincollection')->join('question')->field('question.name as question');
$rows=$q->getAll();
$quest=$crud->grid->addColumn('text','question')->setSource($rows);

但是这个设置了整个网格的源,而不仅仅是我想要的列。

另一种方式:尝试添加模板并填写内容 - 但是如何将每行的内容连接到 $questions?

foreach($rows as $row) {
  $question=array_values($row);
  $questions[]=array_pop($question);
}
#Plan: To implode questions into each row...
$quest=$crud->grid->addColumn('template','question','Spørgsmål')->setTemplate('<?$questions?> ');
4

1 回答 1

2

好的,我发现自己使用了这个页面:http : //agiletoolkit.org/doc/modeltable/expression 和 mysql Group_Concat。

该模型从 questionincollection 和 question 中获取信息,并将集合中的所有问题放入网格中的同一单元格中。如此简单,一旦你知道怎么做;-)

<?php
class Model_QuestionCollection extends Model_Table {
    public $entity_code='questioncollection';
    function init(){
        parent::init();

        $this->addField('name');
        $this->hasMany('QuestionInCollection');
        $this->add('dynamic_model/Controller_AutoCreator');

        $this->addExpression('questionsincollection')->type('html')->set(function($model,$select)use($self){
          return $model->refQuestions($select->getField('id')) ->dsql->join('question','question_id')->field($select->expr('GROUP_CONCAT(question.name SEPARATOR "<br>") questions '));
      });

    }
    function refQuestions($id=null){
    return $this->add('Model_QuestionInCollection')
      ->addCondition('questioncollection_id',$id?:$this->id);
    }
}
于 2013-08-26T12:08:52.363 回答