我一直在做一个代码,它将使用CheckboxColumn
类获取每个列行的数据值。他们所有人都将对象模型作为值返回,但是我刚刚添加的网格之一是返回id模型而不是像其他对象那样返回对象。
代码是这样的:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'tableOptions'=>[
'class'=>'table table-striped table-bordered table-hover',
'data'=>[
'selector'=>'parametros'
]
],
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'liminf',
'limsup',
'departamento.nombre',
'decreto.nombre',
'tipo.nombre',
'subTipo.nombre',
'caracterizacion.nombre',
'rama.nombre',
[
'class' => 'yii\grid\CheckboxColumn'
],
],
]); ?>
返回对象的其他网格具有相同的代码结构..没什么不同..甚至在模型中也是如此。搜索模型代码是这样的:
class LimitesSearch extends Limites
{
public $departamento, $decreto, $tipo, $subTipo, $caracterizacion, $rama;
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'Departamento_id', 'Decreto_id', 'Caracterizacion_id'], 'integer'],
[['Tipo_id', 'SubTipo_id', 'Rama_id'], 'each', 'rule'=>['integer']],
[['liminf', 'limsup'], 'number'],
[['rama','caracterizacion','subTipo','tipo','decreto','departamento','existente'], 'safe'],
];
}
/**
* @inheritdoc
*/
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
/**
* Creates data provider instance with search query applied
*
* @param array $params
*
* @return ActiveDataProvider
*/
public function search($params)
{
$query = Limites::find();
$query->joinWith(['departamento', 'decreto', 'tipo', 'subTipo', 'caracterizacion', 'rama']);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
$query->andFilterWhere([
'id' => $this->id,
'liminf' => $this->liminf,
'limsup' => $this->limsup,
'Departamento_id' => $this->Departamento_id,
'Decreto_id' => $this->Decreto_id,
'Tipo_id' => $this->Tipo_id,
'SubTipo_id' => $this->SubTipo_id,
'Caracterizacion_id' => $this->Caracterizacion_id,
'Rama_id' => $this->Rama_id,
]);
$query->andFilterWhere(['like', 'existente', $this->existente]);
$query->andFilterWhere(['like', 'departamento.nombre', $this->departamento]);
$query->andFilterWhere(['like', 'decreto.nombre', $this->decreto]);
$query->andFilterWhere(['like', 'tipo.nombre', $this->tipo]);
$query->andFilterWhere(['like', 'subTipo.nombre', $this->subTipo]);
$query->andFilterWhere(['like', 'caracterizacion.nombre', $this->caracterizacion]);
$query->andFilterWhere(['like', 'rama.nombre', $this->rama]);
return $dataProvider;
}
}
和控制器/功能:
public function actionSelect()
{
if(Yii::$app->user->can('limites-index'))
{
$searchModel = new LimitesSearch();
$dataProvider = $searchModel->search(['LimitesSearch'=>Yii::$app->request->queryParams]);
return $this->renderAjax('select', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
}
PS:我注意到,只有dataProvider
关系表模型中的网格才返回对象,而这个实际上不是关系表模型的对象只是返回id ..为什么会这样?..不知道,也许我可以解决通过添加一个CheckboxColumn
选项功能..但我想知道为什么会这样
编辑:这是我想要得到的..这来自关系表模型
<tr data-key="{"Decreto_id":1,"Tipo_id":3}"><td>Normas Sanitarias de Calidad del Agua Potable</td><td>Capitulo 2 Aspectos Microbiologicos</td><td><input name="selection[]" value="{"Decreto_id":1,"Tipo_id":3}" type="checkbox"></td></tr>
<tr data-key="{"Decreto_id":1,"Tipo_id":4}"><td>Normas Sanitarias de Calidad del Agua Potable</td><td>Capitulo 3 - Aspectos organolépticos, físi...</td><td><input name="selection[]" value="{"Decreto_id":1,"Tipo_id":4}" type="checkbox"></td></tr>
<tr data-key="{"Decreto_id":1,"Tipo_id":5}"><td>Normas Sanitarias de Calidad del Agua Potable</td><td>Capitulo 4 - Los aspectos radiactivos</td><td><input name="selection[]" value="{"Decreto_id":1,"Tipo_id":5}" type="checkbox"></td></tr>
但这是我从非关系表模型呈现的表中得到的
<tr data-key="1104"><td>1</td><td>0</td><td>0</td><td>Agua</td><td>Normas Sanitarias de Calidad del Agua Potable</td><td>Capitulo 2 Aspectos Microbiologicos</td><td>Articulos 8, 9,10,11,12,13</td><td>Organismos coliformes</td><td>NULL</td><td><input name="selection[]" value="1104" type="checkbox"></td></tr>
<tr data-key="1105"><td>2</td><td>0</td><td>5</td><td>Agua</td><td>Normas Sanitarias de Calidad del Agua Potable</td><td>Capitulo 2 Aspectos Microbiologicos</td><td>Articulos 8, 9,10,11,12,13</td><td>Organismos coliformes Totales</td><td>NULL</td><td><input name="selection[]" value="1105" type="checkbox"></td></tr>
<tr data-key="1106"><td>3</td><td>0</td><td>0</td><td>Agua</td><td>Normas Sanitarias de Calidad del Agua Potable</td><td>Capitulo 2 Aspectos Microbiologicos</td><td>Articulos 8, 9,10,11,12,13</td><td>Examen Virus</td><td>NULL</td><td><input name="selection[]" value="1106" type="checkbox"></td></tr>
<tr data-key="1107"><td>4</td><td>0</td><td>0</td><td>Agua</td><td>Normas Sanitarias de Calidad del Agua Potable</td><td>Capitulo 2 Aspectos Microbiologicos</td><td>Articulos 8, 9,10,11,12,13</td><td>Examen de Bacterias</td><td>NULL</td><td><input name="selection[]" value="1107" type="checkbox"></td></tr>
如你看到的。复选框中的第一个表中的值和data-key
值具有JSON
对象..但在第二个表中仅具有该行的ID
data-key
data属性保存与GridView的每一行相关的记录的主键值。
在单个主键的情况下,它是一个简单的数字;在复合主键的情况下(例如,用于具有多对多关系的表中),它是对象,因为否则无法解决它。在这两种情况下,由于它是属性值,因此在DOM中仍然是字符串。
它在yii.gridView.js中用于通过yii \ grid \ CheckboxColumn获取选定的行:
getSelectedRows: function () {
var $grid = $(this);
var data = gridData[$grid.attr('id')];
var keys = [];
if (data.selectionColumn) {
$grid.find("input[name='" + data.selectionColumn + "']:checked").each(function () {
keys.push($(this).parent().closest('tr').data('key'));
});
}
return keys;
},
当您以如下方式在Javascript中选择行时,将调用此方法:
$('#grid').yiiGridView('getSelectedRows');
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句