【问题标题】:How to get multiple table values to gridview?如何将多个表值获取到gridview?
【发布时间】:2013-06-06 17:53:32
【问题描述】:

我有两个表,我需要过滤这两个表数据并将其放入 gridview。我使用这样的连接两个表

         $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);

return new CActiveDataProvider($student, array('criteria'=>$criteria,));

但在 gridviwe 中只显示学生数据库值。它显示为。如何将两个模型传递给 CActiveDataProvider ?

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

【问题讨论】:

  • 你想做什么?它们是有什么关系还是什么关系?
  • 是的,它们是相关的。它们是三个表作业、作业标记和学生表。我在作业模型作业标记表中做这些事情,参考作业表 ID 和学生 ID。

标签: yii


【解决方案1】:

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-relation:

// 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',
    )
));

【讨论】:

  • 我对学生和 assiment_record 的引用感到困惑。它说 assiment_record id 指的是学生 id。可能是我不正确,我需要更改 assiment_record.php 关系函数吗?请帮助我理解这一点。谢谢
  • 两边的FK指的是'assiment_record.student_id'。由于关系类型,Yii 知道去哪里找。 Read more here.
  • 感谢您的帮助,我按原样尝试您的示例。我遇到了同样的问题。但我调试它,我看到了 $dataProvider 对象中的所有数据,但问题是我如何可以访问吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 1970-01-01
相关资源
最近更新 更多