我需要你的帮助。 我正在使用Yii 2 Framework,我使用Gii生成我的模型,控制器和视图!
我有一个包含3个表的数据库。我的数据库模型在这里:
现在,在“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']);
}
它没有崩溃,但结果不是预期的(或者我的愿望:) :)
使用正确的值填充过滤器。 这些行用categoriaprofissional_fk填充,我希望categoriaprofissional_fk作为一个相关的属性来工作,以获得CategoriaprofissionalFk.carreira_fk(就像我在上一栏中获得categoriaprofissionalFk.carreira_fk(categoria profissional)一样,作为categoriaprofissional的参数。 :: get_carreira('categoriaprofissionalFk.carreira_fk')函数。
请帮助你。 谢谢