Yii CButtonColumn 直接更新数据库

Yii CButtonColumn updating Database directly

所以我的 CButtonColumn 中有一个图标,是否可以通过单击该图标来直接更新数据库中记录的特定字段?

例如,

具有字段 Complete 的预订记录。通过单击该图标,它会自动将 Complete 的值从 0 更改为 1。

有没有可能做这样的事情?如果是这样,如何? 我尝试将整个 SQL 查询添加到 urlExpression 中,例如

Yii::app()->db->createCommand('UPDATE booking SET complete = 1 WHERE id = 1')

但它不起作用。

请帮助我,在此先感谢。

根据 hamed 的评论更新

'changeComplete' => array(
                'imageUrl' => 'images/complete.png',
                'options' => array(
                    'title' => 'Complete',
                    //'style' => 'cursor:pointer; margin: 0 2px;'
                ),
                'url' => 'Yii::app()->createUrl("booking/changeComplete", array("id"=>$data->id))',
                'click' => "function(){
                    $.fn.yiiGridView.update('id', {
                        type:'POST',
                        url:$(this).attr('href'),
                        success:function(data) {
                            $.fn.yiiGridView.update('id');
                        }
                    })
                    return false;
                }",
            ),

在预订控制器中:

public function actionChangeComplete($id)
{
    Yii::app()->db->createCommand('UPDATE booking SET complete = 1 WHERE id = $id');
}

但是点击按钮还是不行。我做错什么了吗?请指教谢谢

您应该知道的第一件事是数据库事务应该在控制器内部执行,而不是视图。所以你应该尝试一个动作来做到这一点。 在您的 gridView

中试试这个
array(
    'class' => 'CButtonColumn',
    'template' => '{changeComplete}',
    'buttons' => array(
        'changeComplete' => array(
            'label' => Your button label',
            'imageUrl' => false,
            'options' => array(
                'title' => 'title of your button',
                'style' => 'cursor:pointer; margin: 0 2px;'
            ),
            'url' => 'Yii::app()->createUrl("test/changeField", array("id"=>$data->id))',
            'click' => "function(){
                        $.fn.yiiGridView.update('gridID', {
                        type:'POST',
                        url:$(this).attr('href'),
                        success:function(data) {
                        $.fn.yiiGridView.update('gridID');
                        }
                    })
                           return false;
                 }
                ",
        ),

    )
),

现在,您需要在TestController中定义actionChangeField(控制器和动作名称只是示例,您应该在合适的控制器中定义一个合适名称的动作)

public function actionChangeField($id)
{
      Yii::app()->db->createCommand('UPDATE booking SET complete = 1 WHERE id = $id')->execute();
}

最后,将 "gridID" 替换为您的网格 ID(不带 # 符号)。