/** * 删除信息 * 多表删除 事物处理 * 删除 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()); } }
public function actionDoFocus() { if (!Yii::app()->request->isAjaxRequest) { $this->error('非法请求'); } $id = $_POST['id']; //首先查找问题是否存在 if (QuestionFocus::model()->exists('uid=:uid AND question_id=:question_id', array(':uid' => Yii::app()->user->id, ':question_id' => $id))) { $is_focus = true; } else { $is_focus = false; } $data = array(); if (!$is_focus) { $transaction = Yii::app()->db->beginTransaction(); try { //执行插入 $qf_model = new QuestionFocus(); $qf_model->question_id = $id; $qf_model->uid = Yii::app()->user->id; $qf_model->add_time = time(); if (!$qf_model->save()) { throw new ErrorException('关注失败'); } $this->incFocusCount($id); $transaction->commit(); $data['mesg'] = '关注成功'; $data['status'] = true; } catch (Exception $e) { $transaction->rollBack(); $data['mesg'] = '关注失败'; $data['status'] = false; } //取消关注 } else { $transaction = Yii::app()->db->beginTransaction(); try { //执行取消插入 if (!QuestionFocus::model()->deleteAll('question_id=:question_id AND uid=:uid', array(':question_id' => $id, ':uid' => Yii::app()->user->id))) { throw new Exception('取消关注失败'); } $this->DecFocusCount($id); $transaction->commit(); $data['mesg'] = '取消关注成功'; $data['status'] = true; } catch (Exception $e) { $transaction->rollBack(); $data['mesg'] = '取消关注失败'; $data['status'] = false; } } echo json_encode($data); }