如何获取gridview的多个表值?

时间:2013-06-06 17:53:32

标签: yii

我有两个表,我需要过滤并将这两个表数据放到gridview.i中使用加入两个这样的表

         $student=new Student;
         $marks=new AssimentMarks;

        $criteria_st=new CDbCriteria;
        $criteria=new CDbCriteria;

        $criteria->select    = 't.st_id,t.st_name,stu.ass_id,stu.marks_cr1,stu.marks_cr2,stu.marks_cr3,stu.marks_cr4,stu.marks_cr5';
        $criteria->join      = 'INNER JOIN assiment_marks stu ON stu.st_id=t.st_id';
        $criteria->condition = 'stu.ass_id=:ass_id';
        $criteria->params    = array(':ass_id'=>Yii::app()->session['modelcrite']['ass_id']);
        $criteria->addInCondition('t.st_id', $studentid);

返回新的CActiveDataProvider($ student,array('criteria'=> $ criteria,));

但是在gridviwe中只显示学生数据库的值。它显示为.how我可以将两个模型传递给CActiveDataProvider吗?

这是数据显示的方式  http://i.stack.imgur.com/Kogjz.jpg

1 个答案:

答案 0 :(得分:3)

1)架构中的外键

你的assiment表应该用外键引用你的学生表,就像这样(假设是SQLite):

CREATE TABLE student (
    id INTEGER PRIMARY KEY,
    name TEXT
);

CREATE TABLE assiment_record(  
    id INTEGER PRIMARY KEY,
    student_id INTEGER,
    cr1 INTEGER,
    cr2 INTEGER,
    cr3 INTEGER,
    cr4 INTEGER,
    cr5 INTEGER,
    FOREIGN KEY( student_id ) REFERENCES student(id)   -- FK goes in the CHILD table. 
);

2)用Gii生成模型:

学生 - >模型/ Student.php

assiment_record - >模型/ AssimentRecord.php

Gii聪明并猜测你的关系:

// AssimentRecord.php looks good! No changes made!
public function relations()
return array(
    'student' => array(self::BELONGS_TO, 'Student', 'student_id'),
);

该学生的辅助记录

3)调整gii的输出(Student.php)

但是Gii并不完美,也不知道你的意图是什么。当前学生关系(HAS_MANY)返回一个数组,但是我不想处理数组(因为我很懒!),所以我把它改成HAS_ONE关系代替:< / p>

// Student.php
public function relations()
{
    return array(
    // Change this:   'assimentRecords' => array(self::HAS_MANY, 'AssimentRecord', 'student_id'),
    /* into this: */  'assimentRecord'  => array(self::HAS_ONE,  'AssimentRecord', 'student_id'),
    );
}

学生有一个辅助记录

4)显示网格:

// views/site/index.php  (Or wherever.)
$dataProvider = new CActiveDataProvider( 'Student' );
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns' => array(
        'id',
        'name',
        'assimentRecord.cr1',
        'assimentRecord.cr2',
        'assimentRecord.cr3',
        'assimentRecord.cr4',
        'assimentRecord.cr5',
    )
));