In my project, I have to hide the delete button from ‘CGridview’ If the record is not related to any other records or table and i have to check the record id, Is it possible or not to delete. Now i created one function ‘is_used()’ in model. This function check this record ‘ID’ is existed in relation table. If it is existed, it will return TRUE otherwise we will get FALSE statement.
After created this function, i will call it from ‘CGridview’ widget for every record. See the below code to run this concept.
User Model
<?php class User extends CActiveRecord { .................... /** * @return array relational rules. */ public function relations() { // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( 'userComments' => array(self::HAS_MANY, 'UserComments', 'user_id'), 'user' => array(self::HAS_MANY, 'User', 'createdby'), ); } // we have to call this from CGridview public function is_used(){ if($this->userComments) return true; else if($this->user) return true; else return false; } .................... } ?>
User CGridView
<?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'user-grid', 'dataProvider'=>$model->search(), //'filter'=>$model, 'columns'=>array( ...... 'username', ...... array( 'class'=>'CButtonColumn', 'buttons'=>array( 'delete'=>array( 'visible'=>'$data->is_used()?false:true' ), ), ), ), )); ?>
Delete Action In User Controller
<?php class UserController extends Controller { ............... public function actionDelete($id) { $model=$this->loadModel($id); if($model->is_used()==false) $model->delete(); else throw new CHttpException(404,'We cant delete this record.'); if(!isset($_GET['ajax'])) $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin')); } ............... } ?>