Example #1
0
 /**
  * 删除信息
  * 多表删除  事物处理
  * 删除 question 中信息
  * 删除 answer 表中信息
  * 删除 question 
  * 更新topic中次数
  */
 public function actionDelete($id)
 {
     $transaction = Yii::app()->db->beginTransaction();
     try {
         //删除question 表信息
         if (!Question::model()->deleteByPk($id)) {
             throw new Exception("删除question表失败");
         }
         //删除 topic_question 表 首先把 topic  id 查找出来
         //获取topic id
         $topic_ids = TopicQuestion::model()->findAll(array('select' => 'topic_id', 'condition' => 'question_id=:question_id', 'params' => array(':question_id' => $id)));
         //更新 topic次数
         foreach ($topic_ids as $model) {
             //更新topic 次数
             if (!Topic::model()->updateByPk($model->topic_id, array('discuss_count' => new CDbExpression('discuss_count-1')))) {
                 throw new ErrorException('更新失败');
             }
         }
         //删除topic_question 表中信息
         if (false === TopicQuestion::model()->deleteAll('question_id=:question_id', array('question_id' => $id))) {
             throw new ErrorException('删除topic_question中信息失败');
         }
         //删除question_comment 中信息
         if (false === QuestionComments::model()->deleteAll('question_id=:question_id', array('question_id' => $id))) {
             throw new ErrorException('删除question_comment中信息失败');
         }
         //获取answer_comment 中id
         $answer_comment_models = Answer::model()->findAll(array('select' => 'id', 'condition' => 'question_id=:question_id', 'params' => array(':question_id' => $id)));
         //删除answer_comment 中信息
         foreach ($answer_comment_models as $answer_comment_model) {
             if (false === AnswerComments::model()->deleteAll('answer_id=:answer_id', array(':answer_id' => $answer_comment_model->id))) {
                 throw new ErrorException('删除answer_comment中信息失败');
             }
         }
         //删除answer 表中信息
         if (false === Answer::model()->deleteAll('question_id=:question_id', array('question_id' => $id))) {
             throw new ErrorException('删除answer中信息失败');
         }
         //删除question_focus 中信息
         if (false === QuestionFocus::model()->deleteAll('question_id=:question_id', array('question_id' => $id))) {
             throw new ErrorException('删除question_focus 中信息失败');
         }
         $transaction->commit();
         $this->success('删除成功');
     } catch (Exception $e) {
         $transaction->rollBack();
         exit($e->getMessage());
         $this->error($e->getMessage());
     }
 }
Example #2
0
 /**
  *
  * 处理更新
  */
 public function actionCheckUpdate()
 {
     if (!Yii::app()->request->isPostRequest) {
         $this->error('一定是你的打开方式不对!');
     }
     //var_dump($_POST);
     $id = $_POST['id'];
     if (!$this->checkUpdateAuth($id)) {
         $this->error('没有权限修改!');
     }
     //启用事物处理
     $transaction = Yii::app()->db->beginTransaction();
     try {
         //更新question 表相关信息
         $data = array();
         $data['question_content'] = htmlspecialchars($_POST['title']);
         $data['question_detail'] = htmlspecialchars($_POST['detail']);
         if (false === Question::model()->updateByPk($id, $data)) {
             $this->error('更新失败');
         }
         //话题更新  如果存在则返回 topic_id  不存在则插入病返回topic_id
         $topics = array_unique($_POST['topic']);
         if ($topics) {
             $criteria = new CDbCriteria();
             $criteria->condition = "topic_title=:topic_title";
             $criteria->select = 'id,discuss_count';
             //循环比较插入
             foreach ($topics as $topic) {
                 $criteria->params = array(':topic_title' => $topic);
                 $topic_id_model = Topic::model()->find($criteria);
                 if (!$topic_id_model) {
                     //未在数据库中找到则插入并返回id
                     $topic_id = $this->insertTopic($topic);
                     if (!$topic_id) {
                         //插入失败
                         throw new ErrorException("话题添加失败1");
                     }
                 } else {
                     $topic_id = $topic_id_model->id;
                     //更新 topic 表中 discuss_count字段+1
                     $topic_id_model->discuss_count = $topic_id_model->discuss_count + 1;
                     if (!$topic_id_model->save(false)) {
                         //var_dump($topic_id_model->errors);
                         throw new ErrorException("话题添加失败2");
                     }
                 }
                 //根据topic_id 以及question_id查找是否以及存在 没有则插入
                 if (!TopicQuestion::model()->exists('topic_id=? AND question_id=?', array($topic_id, $id))) {
                     //插入 topic_question 中
                     if (!$this->insertTopicQuestion($topic_id, $id)) {
                         throw new ErrorException("添加失败");
                     }
                 }
                 //该问题实际的topic_id
                 $true_topics[] = $topic_id;
             }
             //获取存在 topic_question 的 topic_id 并查找出其中多出来的
             $criteria = new CDbCriteria();
             $criteria->condition = "question_id=?";
             $criteria->select = 'topic_id';
             $criteria->params = array($id);
             $models = TopicQuestion::model()->findAll($criteria);
             //所有在topicQuestion中的id
             $all_topics = array();
             foreach ($models as $model) {
                 $all_topics[] = $model['topic_id'];
             }
             //获取需要删除的 topic_id
             $delete_topics = array_diff($all_topics, $true_topics);
             //var_dump($delete_topics);
             //从 topic_question 表中删除 并在topic 表中 discuss_count 字段-1
             foreach ($delete_topics as $delete_topic) {
                 if (!TopicQuestion::model()->deleteAll('topic_id=? AND question_id=?', array($delete_topic, $id))) {
                     throw new Exception("更新失败");
                 }
                 //disscuss_count字段-1
                 if (false === Topic::model()->updateByPk($delete_topic, array('discuss_count' => new CDbExpression("discuss_count-1")))) {
                     throw new Exception("更新失败");
                 }
             }
         }
         $transaction->commit();
         $this->success('修改成功', $this->createUrl('question/index', array('id' => $id)));
     } catch (Exception $e) {
         $transaction->rollBack();
         exit($e->getMessage());
     }
 }