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

时间:2015-07-23 11:05:38

标签: gridview relational-database yii2

我需要你的帮助。 我正在使用Yii 2 Framework,我使用Gii生成我的模型,控制器和视图!

我有一个包含3个表的数据库。我的数据库模型在这里:

Database Model

现在,在“colaborador”的Gridview中,我想用“carreira”表中的数据创建一个新列。  必须以这种方式填充这些值:“colaborador”具有属于“carreira”的“categoriaprofissional”。  因此,“colaborador”表中的属性“categoriaprofissional_fk”允许访问“categoriaprofissional”,其中包含访问“carreira”的外键“carreira_fk”。

我遇到了解决这个问题的麻烦。

这是我对“colaborador”的索引观点:

<?= 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}',
                    ],
    ],
]); ?>

在“categoriaprofissional”模型中,我创建了一些函数来从“carreira”中重新获取数据:

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']);
}

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

Gridview Result

使用正确的值填充过滤器。  这些行用categoriaprofissional_fk填充,我希望categoriaprofissional_fk作为一个相关的属性来工作,以获得CategoriaprofissionalFk.carreira_fk(就像我在上一栏中获得categoriaprofissionalFk.carreira_fk(categoria profissional)一样,作为categoriaprofissional的参数。 :: get_carreira('categoriaprofissionalFk.carreira_fk')函数。

请帮助你。  谢谢

0 个答案:

没有答案