Yii CButtonColumn обновление базы данных напрямую

Итак, у меня есть значок в моем CButtonColumn, возможно ли сделать так, чтобы, щелкая по этому значку, он напрямую обновлял определенное поле записи в базе данных?

Например,

Запись о бронировании, которая имеет поле Complete, Нажав на значок, он автоматически изменит значение Complete от 0 до 1.

Можно ли сделать что-то подобное? Если так, то как? Я попытался добавить весь запрос SQL в urlExpression лайк,

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

Но это не работает.

Пожалуйста, помогите мне, спасибо заранее.

ОБНОВЛЕНИЕ на основе комментария Хамеда

'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');
}

но он все еще не работает при нажатии на кнопку. Я сделал что-то неправильно? Пожалуйста, посоветуйте спасибо

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" на идентификатор вашей сетки (без знака #).

Другие вопросы по тегам