YII2模型关系输出gridview
YII2 model relations output gridview
我在yii2模型中有如下关系:
public function getJobInfos()
{
return $this->hasMany(JobInfo::className(), ['ID' => 'ID']);
}
Tbl 工作信息:
CREATE TABLE [dbo].[JobInfo](
[ID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[Parameter] [int] NULL,
[Value] [varchar](255) NULL,
....
在 GridView 中获取 JobInfo works:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'ID',
[
'label' => 'Strings',
'value' => function ($data) {
$strings = [];
foreach($data->jobInfos as $JobInfo) {
$strings[] = $JobInfo->Value;
}
return implode(',', $strings);
},
],
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
现在 JobInfo 中的所有内容都已加载到字符串列中。
现在如何 select 为集合创建一个新列:
$JobInfo->Parameter(标签)和$JobInfo->Value(值)?
例如,如果参数是 "OrderNo"?
遗憾的是,无法使用 Foreach 创建列。
谢谢!
$data->jobInfos
return Tbl_JobInfo
个对象的数组
'value' => function($data) {
return implode(\yii\helpers\ArrayHelper::map($data->jobInfos, 'Parameter', 'Value')),
},
此函数现在 returns 列中的值。但是如果我创建很多列,我只想构造一次数组。
[
'label' => 'column_name1',
'value' => function($model) {
$datareturn = $model-> jobInfos()
->where(['=', 'Parameter', 'column_name1'])
->one();
return $datareturn['Value'];
},
],
用模型中的所有参数构建一个数组并将其传递给控制器中的视图?
使用类似于:
Index.php
[
'class' => 'kartik\grid\ExpandRowColumn',
'width' => '300px',
'value' => function ($model, $key, $index, $column) {
return GridView::ROW_COLLAPSED;
},
'detail' => function ($model, $key, $index, $column) {
return Yii::$app->controller->renderPartial('_expandableview', ['model' =>
$model]);
},
'disabled'=> function ($model, $key, $index, $column) {
$rows = $model->jobInfos;
if (!empty($rows)) { return false;} else { return true;}
},
'headerOptions' => ['class' => 'kartik-sheet-style'],
'expandOneOnly' => true,
],
展开视图:
<div class="Info-expandable-view">
<table border="0" class="table transparent">
<?php
$rows = $model->jobInfos;
foreach ($rows as $key => $value) {
//split your columns here using
//$myParameter = $value['Parameter'];
//$myValue = $value['Value'];
}
我在yii2模型中有如下关系:
public function getJobInfos()
{
return $this->hasMany(JobInfo::className(), ['ID' => 'ID']);
}
Tbl 工作信息:
CREATE TABLE [dbo].[JobInfo](
[ID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[Parameter] [int] NULL,
[Value] [varchar](255) NULL,
....
在 GridView 中获取 JobInfo works:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'ID',
[
'label' => 'Strings',
'value' => function ($data) {
$strings = [];
foreach($data->jobInfos as $JobInfo) {
$strings[] = $JobInfo->Value;
}
return implode(',', $strings);
},
],
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
现在 JobInfo 中的所有内容都已加载到字符串列中。
现在如何 select 为集合创建一个新列: $JobInfo->Parameter(标签)和$JobInfo->Value(值)? 例如,如果参数是 "OrderNo"?
遗憾的是,无法使用 Foreach 创建列。
谢谢!
$data->jobInfos
return Tbl_JobInfo
个对象的数组
'value' => function($data) {
return implode(\yii\helpers\ArrayHelper::map($data->jobInfos, 'Parameter', 'Value')),
},
此函数现在 returns 列中的值。但是如果我创建很多列,我只想构造一次数组。
[
'label' => 'column_name1',
'value' => function($model) {
$datareturn = $model-> jobInfos()
->where(['=', 'Parameter', 'column_name1'])
->one();
return $datareturn['Value'];
},
],
用模型中的所有参数构建一个数组并将其传递给控制器中的视图?
使用类似于:
Index.php
[
'class' => 'kartik\grid\ExpandRowColumn',
'width' => '300px',
'value' => function ($model, $key, $index, $column) {
return GridView::ROW_COLLAPSED;
},
'detail' => function ($model, $key, $index, $column) {
return Yii::$app->controller->renderPartial('_expandableview', ['model' =>
$model]);
},
'disabled'=> function ($model, $key, $index, $column) {
$rows = $model->jobInfos;
if (!empty($rows)) { return false;} else { return true;}
},
'headerOptions' => ['class' => 'kartik-sheet-style'],
'expandOneOnly' => true,
],
展开视图:
<div class="Info-expandable-view">
<table border="0" class="table transparent">
<?php
$rows = $model->jobInfos;
foreach ($rows as $key => $value) {
//split your columns here using
//$myParameter = $value['Parameter'];
//$myValue = $value['Value'];
}