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