1

QuestionCollectionモデルからコンテンツを取得するグリッドがあります。

1 つの列で、コレクション内の質問を表示したいと思います。質問をコレクションに関連付けるために、次の 3 つのモデルを使用します。

  1. 質問
  2. QuestionInCollection
  3. 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);

しかし、これは、私が望んでいた列だけでなく、グリッド全体のソースを設定しました。

別の方法: テンプレートを追加してコンテンツを入力しようとしていますが、各行のコンテンツを $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 に答える