在 gridview 中显示一个字段的多个值
Show multiple values for a field in gridview
我是yii2的新手。我有一个 languages
master table(在 name
字段中包含 html、css、java、php...)和一个 registration
table,其中有一个名为 language_id
的字段。我使用 json_encode 为该字段插入了多个值。
现在在数据库中显示语言 ID 为 ["1","2","3","4","5"]
现在我想使用 gridview 显示存储在数据库中的数据。我如何在 gridview 中显示语言的多个值。下面给出的是我用 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'],
],
]); ?>
而在我的模型中代码如下
public function getLanguages(){
$result = json_decode($this->language_id, true);
return $this->hasOne(Languages::className(), ['id' => $result]);
}
终于得到答案了。但我认为这不是解决此问题的正确方法。分页不起作用(当我进入 2 页等时)并显示错误:
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'],],
]); ?>
我是yii2的新手。我有一个 languages
master table(在 name
字段中包含 html、css、java、php...)和一个 registration
table,其中有一个名为 language_id
的字段。我使用 json_encode 为该字段插入了多个值。
现在在数据库中显示语言 ID 为 ["1","2","3","4","5"]
现在我想使用 gridview 显示存储在数据库中的数据。我如何在 gridview 中显示语言的多个值。下面给出的是我用 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'],
],
]); ?>
而在我的模型中代码如下
public function getLanguages(){
$result = json_decode($this->language_id, true);
return $this->hasOne(Languages::className(), ['id' => $result]);
}
终于得到答案了。但我认为这不是解决此问题的正确方法。分页不起作用(当我进入 2 页等时)并显示错误:
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'],],
]); ?>