Я делаю cgridview
с одним столбцом, редактируемым для данных обновления, based on this post.
Включить только кнопку (обновить лицензию), чтобы обновить все поля в вызове ajax.
Но это только обновляет первое поле.
Я думаю, что что-то произошло на $_POST
переменной.
Я пытаюсь несколько способов взглянуть на переменную $_POST
без ошибок.
Мой код:
Вид:
<?php $form=$this->beginWidget('CActiveForm', array(
'enableAjaxValidation'=>true,
)); ?>
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'rta-client-grid',
'selectableRows'=>1,
'selectionChanged'=>'mostrarDetalles', // via 1: para mostrar detalles al seleccionar
'dataProvider'=>$modelClient->search(),
'filter'=>$modelClient,
'columns'=>array(
array(
'id'=>'autoId',
'class'=>'CCheckBoxColumn',
'selectableRows' => '50',
),
'oid',
'name',
'surname',
'id_country',
'nif',
//'CifDni',
array(
'name'=>'CifDni',
'type'=>'raw',
'value'=>'CHtml::textField("CifDni[$data->oid]",$data->CifDni,array("style"=>"width:80px;"))',
//
),
array(
'class'=>'CButtonColumn',
),
array(
'class'=>'CButtonColumn',
'template' => '{detallarClientes}',
'buttons' => array(
'detallarClientes'=>array(
'label'=>'ver',
'imageUrl'=>'images/demo1/view.png',
'click'=>'js:mostrarDetalles',
),
),
),
),
)); ?>
<script>
function reloadGrid(data) {
$.fn.yiiGridView.update('rta-client-grid');
}
</script>
<?php echo CHtml::ajaxSubmitButton('Filter',array('rtaClient/ajaxupdate'), array(),array("style"=>"display:none;")); ?>
<?php echo CHtml::ajaxSubmitButton('Update licencias',array('rtaClient/ajaxupdate','act'=>'doUpdateLicencia'), array('success'=>'reloadGrid'),array("style"=>"float:right;")); ?>
<?php $this->endWidget(); ?>
Контроллер:
public function actionAjaxupdate()
{
$act = $_GET['act'];
if($act=='doUpdateLicencia')
{
$sortOrderAll = $_POST['CifDni'];
if(count($sortOrderAll)>0)
{
foreach($sortOrderAll as $menuId=>$sortOrder)
{
$model=$this->loadModel($menuId);
$model->CifDni = $sortOrder;
$model->save();
}
}
}
}
Сообщение переменной на FirebugConsole:
CifDni[10] H
CifDni[11] I
CifDni[12] J
CifDni[2] A
CifDni[3] B
CifDni[4] C
CifDni[6] D
CifDni[7] E
CifDni[8] F
CifDni[9] G
RtaClient[CifDni]
RtaClient[id_country]
RtaClient[name]
RtaClient[nif]
RtaClient[oid]
RtaClient[surname]
Я просто решил проблему. Я изменил контроллер, добавив:
foreach($_POST as $id=>$value)
{
if($id=="CifDni") {
foreach($value as $id2=>$value2)
{
$model=$this->loadModel($id2);
$model->CifDni = $value2;
$model->save();
}
}
}
Но проблема в базе была в другой области (не показал на сетке), которая имеет правило «требуется» и в базе данных не имеет значения, и они не позволяют мне обновление по ошибке SQL (ошибка sql не появляется в журнале).
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
//array('pass', 'required'), //<----
В вашем случае это означает, что запись, которая имеет oid = 10 (первая), будет обновлена, но oid = 11,12, .... 2,3,4 не так ли? –
Привет @TelvinNguyen, я просто решил проблему. Я был в данных по таблице и правилах по модели. – user2697228