public function getTopic()
 {
     return $this->hasOne(TicketTopic::className(), array('topic_id' => 'topic_id'));
 }
 /**
  * 创建工单
  * @return string|\yii\web\Response
  */
 public function actionAdd_ticket()
 {
     $ticketModel = new Ticket();
     $ticketCdataModel = new TicketCdata();
     if (Yii::$app->request->post()) {
         $ticketForm = Yii::$app->request->post('Ticket');
         $ticketCdataForm = Yii::$app->request->post('TicketCdata');
         $fileForm = Yii::$app->request->post('File');
         $ticketTopicRelationForm = Yii::$app->request->post('TicketTopicRelation');
         $ticketModel->number = $ticketModel->newTicketNumber();
         $ticketModel->user_id = Yii::$app->user->identity->id;
         $ticketModel->status_id = TicketStatus::CREATED;
         $ticketModel->type_id = Ticket::FEEDBACK_TICKET_TYPE;
         $ticketModel->source_id = 1;
         $ticketModel->ip_address = Yii::$app->request->getUserIP();
         $ticketModel->created = date("Y-m-d H:i:s");
         $ticketModel->updated = date("Y-m-d H:i:s");
         $ticketCdataModel->subject = $ticketCdataForm['subject'];
         $ticketCdataModel->detail = $ticketCdataForm['detail'];
         $ticketCdataModel->priority = 1;
         //事务
         $connection = Yii::$app->db;
         $transaction = $connection->beginTransaction();
         try {
             if (!$ticketModel->save()) {
                 throw new Exception("数据存储失败,请检查数据库配置(error:1001)");
             }
             $ticketCdataModel->ticket_id = $ticketModel->ticket_id;
             if (!$ticketCdataModel->save()) {
                 throw new Exception("数据存储失败,请检查数据库配置(error:1002)");
             }
             if (!empty($fileForm['file_index']) && is_array($fileForm['file_index'])) {
                 foreach ($fileForm['file_index'] as $k => $v) {
                     $fileModel = new File();
                     $fileModel->attribute = Ticket::tableName();
                     $fileModel->attribute_id = $ticketModel->ticket_id;
                     $fileModel->file_name = $v['name'];
                     $fileModel->file_index = $v['path'];
                     $fileModel->size = $v['size'];
                     $fileModel->type = $v['type'];
                     if (!$fileModel->save()) {
                         throw new Exception("数据存储失败,请检查数据库配置(error:1003)");
                     }
                 }
             }
             if (!empty($ticketTopicRelationForm['topic_id']) && is_array($ticketTopicRelationForm['topic_id'])) {
                 foreach ($ticketTopicRelationForm['topic_id'] as $v) {
                     $ticketTopicRelationModel = new TicketTopicRelation();
                     $ticketTopicRelationModel->ticket_id = $ticketModel->ticket_id;
                     $ticketTopicRelationModel->topic_id = $v;
                     if (!$ticketTopicRelationModel->save()) {
                         throw new Exception("数据存储失败,请检查数据库配置(error:1004)");
                     }
                 }
             }
             $transaction->commit();
         } catch (Exception $e) {
             $transaction->rollBack();
             return $this->redirect(array('add_ticket'));
         }
         return $this->redirect(array('detail', 'number' => $ticketModel->number));
     } else {
         $topicModel = new TicketTopic();
         $topic_list = $topicModel->find()->select(array('topic_name', 'topic_id'))->indexBy('topic_id')->column();
         $fileModel = new File();
         $ticketTopicRelationModel = new TicketTopicRelation();
         return $this->render('add_ticket', array('ticketModel' => $ticketModel, 'ticketCdataModel' => $ticketCdataModel, 'fileModel' => $fileModel, 'ticketTopicRelationModel' => $ticketTopicRelationModel, 'topic_list' => $topic_list));
     }
 }