0

所以我的 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');
}

但是单击按钮时仍然无法正常工作。我做错什么了吗?请指教谢谢

4

1 回答 1

1

您应该知道的第一件事是数据库事务应该在控制器内部执行,而不是视图。因此,您应该尝试执行此操作。在你的 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;
                 }
                ",
        ),

    )
),

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

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

最后,将“gridID”替换为网格的 id(不带 # 符号)。

于 2015-03-30T04:40:10.507 回答