我有一个网格,可以从QuestionCollection
模型中获取内容。
在一栏中,我想展示馆藏中的问题。我使用三个模型将问题连接到集合:
也就是说,我希望显示连接到额外列中特定行的内容,该列将使用addColumn
添加到网格中。但是如何将这些内容插入每一行?
我尝试过使用setTemplate
和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);
但是这个设置了整个网格的源,而不仅仅是我想要的列。
另一种方式:尝试添加模板并填写内容 - 但如何将每行的内容连接到$ question?
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?> ');
答案 0 :(得分: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);
}
}