我一直在制作一个代码,它可以使用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
答案 0 :(得分:1)
data-key
数据属性保存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');