如何从grid到多个表中获取日期?

时间:2016-11-03 20:45:24

标签: gridview yii2

模型:

public function getGroups()
{
    return $this->hasMany(Groups::className(), ['id' => 'employee_id'])
            ->viaTable('groups_of_employee', ['group_id' => 'id']);
}

视图:

<div class="site-index">
<?= GridView::widget([
'dataProvider' => $provider,
'columns' => [
    'lastname',
    'position',
    'groups.name_of_group'
   ],
 ]);  
 ?>    

我编写了这段代码,它没有错误,但字段name_of_group为空。错误在哪里?

1 个答案:

答案 0 :(得分:1)

如果关系是多对多,则无法传递关系,然后传递表名/类属性。它本身并不知道如何在一列中输出多个结果,因此您需要执行与此类似的操作...

<?= GridView::widget([
    'dataProvider' => $provider,
    'columns' => [
        'lastname',
        'position',
        [
            'label' => 'Groups'
            'value' => function($data) {
                $names = '';
                foreach ($data->groups as $group) {
                    $names .= $group->name_of_group . ', ';
                }
                return $names;
            },
        ]
    ],
]);  
?> 

这将帮助您入门,但您可能希望应用一些不同的格式来列出所有名称,例如HTML列表。