i am new in yii2. I have a languages
master table (in name
field contains html,css, java,php...) and a registration
table in which there is a field called language_id
. I have inserted multiple values for that field using json_encode.
Now in database showing language id's as ["1","2","3","4","5"]
Now i want to display the data stored in db using a gridview. How can i show the multiple values for languages in gridview. Given below is what i have tried with my gridview
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'first_name',
'last_name',
'gender',
'address',
['label'=>'Course',
'value'=>'course.name'],
'email:email',
['label'=>'Languages Known',
'value'=>'languages.name'],
'course_completion_date',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
and in my Model code is as follows
public function getLanguages(){
$result = json_decode($this->language_id, true);
return $this->hasOne(Languages::className(), ['id' => $result]);
}
Finally I got answer. but I do not think this is the proper solution for this problem. Pagination is not working (when i enter into 2 page and so on) and showing error as :
Invalid argument supplied for foreach()
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'first_name',
'last_name',
'gender',
'address',
['label'=>'Course',
'value'=>'course.name'],
'email:email',
['label'=>'Languages Known',
'value' => function ($data)
{
$arr= json_decode($data->language_id,true);
$lang="";
$i=0;
foreach ($arr as $value)
{
$model_lan = Languages::find()->where(['id'=>$value])->one();
$lang .= $model_lan->name.' ';
}
return $lang;
},],
'course_completion_date',
['class' => 'yii\grid\ActionColumn'],],
]); ?>