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(不带 # 符号)。
所以我的 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(不带 # 符号)。