Yii2框架:GridView,使用另一个具有间接关系的平板电脑的数据创建新列

Yii2框架:GridView,使用另一个具有间接关系的平板电脑的数据创建新列,gridview,relational-database,yii2,Gridview,Relational Database,Yii2,我需要你的帮助。 我使用的是Yii 2框架,我用Gii生成我的模型、控制器和视图 我有一个包含3个表的数据库。我的数据库模型如下: 现在,在“colaborador”的Gridview中,我想用“carreira”表中的数据创建一个新列。 这些值必须以这种方式填写:“colaborador”有一个属于“carreira”的“CategoriaProfessional”。 因此,表“colaborador”中的atribute“categoriaproficial_fk”允许访问“categor

我需要你的帮助。 我使用的是Yii 2框架,我用Gii生成我的模型、控制器和视图

我有一个包含3个表的数据库。我的数据库模型如下:

现在,在“colaborador”的Gridview中,我想用“carreira”表中的数据创建一个新列。 这些值必须以这种方式填写:“colaborador”有一个属于“carreira”的“CategoriaProfessional”。 因此,表“colaborador”中的atribute“categoriaproficial_fk”允许访问“categoriaproficial”,该表具有访问“carreira_fk”的外键

我很难找到解决这个问题的办法

这是我对“colaborador”的索引视图:

它没有崩溃,但结果不是预期的(或者我的愿望是什么:)

过滤器中填充了正确的值。 行中填充了Category profissional_fk,我希望Category profissional_fk作为Category profissional fk.carreira_fk中obain的相关属性(与我在最后一列(Category a profissional)中获得Category profissional fk.carreira_fk的方式相同)用作categoriaprofissional::get_carreira('categoriaprofissionalFk.carreira_fk')函数的参数

我需要你的帮助。 多谢各位

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

        'numerofuncionario',
            'nome',
            //now this is the new column that i want to create
            [
                    'label' => 'Carreira',
                            'attribute' => 'categoriaprofissional_fk',
                    'value' => categoriaprofissional::get_carreira('categoriaprofissionalFk.carreira_fk'),
                    'filter'=> categoriaprofissional::get_carreiras(),
            ],
            //this is the "categoriaprofissional" related directly with "colaborador" and works perfectly! 
            [
                    'attribute' => 'categoriaprofissional_fk',
                    'value' => 'categoriaprofissionalFk.nome',
                    'filter'=> categoriaprofissional::get_nomes(),
            ],
                    [
                            'class' => 'yii\grid\ActionColumn',
                            'template' => '{view}',
                    ],
    ],
]); ?>
public static  function  get_nomes(){
    $cat = Categoriaprofissional::find()->orderBy(['nome' => SORT_ASC])->all();
    $cat = ArrayHelper::map($cat, 'idcategoriaprofissional', 'nome');
    return $cat;
}

public static  function  get_carreira($id){
    $car = Carreira::find()->where(['idcarreira' => $id])->one();
    return $car;
}

public static  function  get_carreiras(){
    $cars = Carreira::find()->orderBy(['nome' => SORT_ASC])->all();
    $cars = ArrayHelper::map($cars, 'idcarreira', 'nome');
    return $cars;
}


/**
 * @return \yii\db\ActiveQuery
 */
public function getCarreiraFk()
{
    return $this->hasOne(Carreira::className(), ['idcarreira' => 'carreira_fk']);
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getColaboradors()
{
    return $this->hasMany(Colaborador::className(), ['categoriaprofissional_fk' => 'idcategoriaprofissional']);
}