yii - YII 中的 CGRIDVIEW 两表数据显示

标签 yii

我有 2 张 table (学生和员工)

student(reg_no , s_name, dept, f_name) reg_no 是主键 employee(e_no,design,salary,reg_no) reg_no 是外键引用学生(reg_no)。

我想显示e_no,员工的设计 和 s_name,来自学生表的部门。 所以我完整的 cgridview 是

e_no,设计,s_name,部门

我的employee/admin.php代码

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'employee-grid',
'dataProvider'=>$model->searchEmployees(),
//'filter'=>$model,
'columns'=>array(
    'e_no',
    'e_name',
    'design',
    'salary',
    'reg_no',
    array('name'=>'student.s_name',  'value'=>'$data->student->s_name'),   // student name
       'salary',  // employee.salary


    array(
        'class'=>'CButtonColumn',
    ),

),
));
?>

我的 model/employee.php 代码用于 searchEmployees()

public function searchEmployees()
{
    $criteria=new CDbCriteria;
    $criteria->alias = 'i';
$criteria->compare('e_no',$this->e_no);
    $criteria->compare('e_name',$this->e_name,true);
    $criteria->compare('design',$this->design,true);
    $criteria->compare('salary',$this->salary);
    $criteria->compare('reg_no',$this->reg_no);


$criteria->join= 'JOIN student d ON (i.reg_no=d.reg_no)';

return new CActiveDataProvider($this, array(
    'criteria'=>$criteria,
    'sort'=>array(
        'defaultOrder'=>'reg_no ASC',
    ),
));
}

但我遇到错误

属性“Employee.studentname”未定义。

如何解决错误请帮助。

谢谢

最佳答案

您可以使用 CActiveRecord->getRelated 配置 cgridview 显示相关记录的信息在您的列自定义中...如下所示:

student(reg_no , s_name, dept, f_name) 将是模型 Student。 employee(e_no,design,salary,reg_no) 将是模型 Employee

Employee.e_noEmployee.designStudent.s_nameStudent.dept 是您想要的值所以你的列数组应该是:

<?php 
    $this->widget('zii.widgets.grid.CGridView', array(
        'id'=>'student-grid',
        'dataProvider'=>Student::model()->search(),
        //'filter'=>$model,
        'columns'=>array(
            array(
                'header'=>Employee::model()->getAttributeLabel('e_no'), //column header
                'value'=>'$data->getRelated('employee')->e_no', //column name, php expression
                'type'=>'raw',
            ),
            array(
                'header'=>Employee::model()->getAttributeLabel(\'design\'), //column header
                'value'=>'$data->getRelated(\'employee\')->design', //column name, php expression
                'type'=>'raw',
            ),
            's_name',
            'dept',
        ),
    ));
?>

注意相关记录数据是如何在自定义列的“值”规范中完成的,并且 getRelated() 的参数是定义到 Student->relations() 方法中定义的 Employee 模型的关系的名称。另请检查CGridView documentation在专栏中了解有关其工作原理的更多信息。

更新:您可以轻松切换此 CGridView 实例化的方法以使用 Employee 而不是 Student,并且仍然显示相同的信息通过更改列数组。

更新 2:您可以轻松处理列数组中不存在的关系:

'columns'=>array(
    array(
        'header'=>Employee::model()->getAttributeLabel('e_no'), //column header
        'value'=>'($data->getRelated(\'employee\')=== null)?'No related employee registry':$data->getRelated('employee')->e_no', //column name, php expression
        'type'=>'raw',
    ),
    array(
        'header'=>Employee::model()->getAttributeLabel(\'design\'), //column header
        'value'=>'($data->getRelated(\'employee\')=== null)?'No related employee registry':$data->getRelated(\'employee\')->design', //column name, php expression
        'type'=>'raw',
    ),
    's_name',
    'dept',
),

通过对 'columns' 中成员的 'value' 字段进行调整,每当模型尝试访问相关模型时,我们都会显示一条小消息。 getRelated() 返回相关记录,如果未找到,则返回 null。也许您的 Students 有一个等效的 Employee 模型,这可能是错误的原因。希望以上内容能帮助您解决问题。

关于yii - YII 中的 CGRIDVIEW 两表数据显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288723/

相关文章:

yii - HTML 按钮调用 Controller /操作

php - 在 Yii2 中获取模型属性的类型

php - "session_regenerate_id(): Cannot regenerate session id - headers already sent"如何解决

php - yii-无法找到请求的操作

php - MySql 数据透视表到 Yii CActiveDataProvider

Yii CAPTCHA 网址已损坏

php - 如何覆盖 CActiveDataProvider 方法以在 Yii 中默认以降序显示 CGridview

javascript - Yii,通过ajax更新列表,无法理解它是如何工作的;

php - Yii2中如何添加更多的用户身份 session 属性?

mysql - yii 结合 addColumnCondition