Yii从dropDownList更新数据库

时间:2016-09-12 14:23:39

标签: php yii yii2-advanced-app yii2-basic-app

我尝试从CGridView的dropDownList更新数据库,但没有成功。

这是CGridView的代码:

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id' => 'invoice-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(     

    'id',

    'username',

       array(
            'name'  => 'state',
            'type'  => 'raw',
            'value' => '$data->stateDropdown',
            'filter' => array('0' => Yii::t('app', 'No'),
                              '1' => Yii::t('app', 'Yes'),
                             ),
       ),

    array(
        'class' => 'CButtonColumn',
        'template'=>'{view}',
    ),
),
)); ?>

以下是模型中函数 stateDropDown()的getter:

public function getStateDropdown()
{
    $state = array(
            0 => 'No',
            1 => 'Yes',
    );
    return CHtml::dropDownlist('state', $this->state, $state, array(
            'class'    => 'state',
            'data-id'  => $this->id,
            'onchange' => 'alert(0);',
    ));
}

当我更改dropDownList元素时,会触发警报脚本,但是当我尝试使用某个函数时,我有一个错误。我想使用下面描述的这个函数来更新数据库中的state值。

function updateState($state, $id)
{
$user = User::model()->findByPk($id);
$user->state = $state;
$user->update();
}

如何真正调用函数updateState()代替alert(0)

1 个答案:

答案 0 :(得分:0)

快速回答:使用x-editable extension,这项工作做得非常出色

另外,你必须建立完全相同的东西,

让用户从列表中选择一个项目,然后发出ajax请求以保存该更改