我有两个表,我需要过滤并将这两个表数据放到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
答案 0 :(得分:3)
你的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.
);
学生 - >模型/ 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'),
);
该学生的辅助记录。
但是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'),
);
}
学生有一个辅助记录。
// 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',
)
));