【问题标题】:Yii2 How to use two different Models in one GridViewYii2 如何在一个 GridView 中使用两个不同的模型
【发布时间】:2014-10-29 02:59:01
【问题描述】:

我在 Job (Department, Company...) 和 Employee (EmpName, EmpAge, EmpPosition...) 的两个不同 Model 1 中有一些数据

我如何在一个 gridview 中同时使用这两个模型,以便拥有一个类似 (EmpName, EmpPosition, Company, Department....) 的表格

我知道如何从一个模型创建网格视图

 <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'EmpName',
             'EmpPosition',   ...........     ],
]); ?>

【问题讨论】:

    标签: gridview controller grid action yii2


    【解决方案1】:

    如果您在 Employee 模型中定义了一个关系来获取对 Job 模型的引用,则可以使用

    <?= GridView::widget([
            'dataProvider' => $dataProvider,
            'columns' => [
                ['class' => 'yii\grid\SerialColumn'],
                'EmpName',
                'EmpPosition',
                [
                    'name' => 'Company',
                    'value' => '$data->Job->Company',
                ],   
                ...........     ],
    ]); ?>
    

    员工模型

    ::
    function getJob() {
        /*
         * Assumptions:
         * - foreign key to job in employee table is named job_id
         * - primary key in job table is named id
         */
        return this->hasOne(Job::classname(), ['id' => 'job_id']);
    }
    ::
    

    更多信息请参见Yii2 Documentation

    【讨论】:

    • 哦,好的,我明白了,但是我没有在 Employee 模型中定义关系,请问我该怎么做?谢谢
    • @Test404 请参阅回答中的员工模型。
    【解决方案2】:

    对我来说,它不适用于此:

    [
    
    'name' => 'Company',
    'value' => '$data->Job->Company',
    ],   
    

    它可以正常工作

    [
    
    'label' => 'Company',
    'value' => function ($data){ return $data->Job->Company; },
    ],
    

    【讨论】:

      【解决方案3】:

      Yii2 GridView DataColumn 支持模型关系的点表示法

      [
        'name' => 'Company',
        'value' => 'job.Company',
      ],
      

      语法更短,避免$data-&gt;Job = null时出现异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多