/** * (string) actionDataTables : datatable * @return string * @throws Exception * @throws \Exception * @throws \yii\db\Exception */ public function actionDataTables() { $responseType = Yii::$app->request->get('type'); $returnData = []; switch ($responseType) { case "fetch": //前三个月日期 $dateThreeMonthAgo = date('Ymd', mktime(0, 0, 0, date("m") - 3, date("d"), date("Y"))); $unitlist = Unit::getChildList(Yii::$app->request->get('id')); $returnData = Personal::find()->select(['*'])->where('FIND_IN_SET (unit, :unitlist)', [':unitlist' => $unitlist]); //extra_filter $extra_filter = Yii::$app->request->get('extra_filter'); switch ($extra_filter) { case "包含历史资料": break; case "流动人口": $returnData->andFilterWhere(['<>', 'flag', '01'])->andFilterWhere(['<=', 'logout', 0]); break; case "已婚男性": $returnData->andFilterWhere(['sex' => '01'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]); break; case "已婚女性": $returnData->andFilterWhere(['sex' => '02'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]); break; case "已婚人员": $returnData->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]); break; case "未婚人员": $returnData->andFilterWhere(['marry' => '10'])->andFilterWhere(['<=', 'logout', 0]); break; case "未婚男性": $returnData->andFilterWhere(['sex' => '01'])->andFilterWhere(['marry' => '10'])->andFilterWhere(['<=', 'logout', 0]); break; case "未婚女性": $returnData->andFilterWhere(['sex' => '02'])->andFilterWhere(['marry' => '10'])->andFilterWhere(['<=', 'logout', 0]); break; case "已婚未育": $returnData->andFilterWhere(['childnum' => '0'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]); break; case "已婚育一孩": $returnData->andFilterWhere(['childnum' => '1'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]); break; case "已婚育二孩": $returnData->andFilterWhere(['childnum' => '2'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]); break; case "已婚育三孩及以上": $returnData->andFilterWhere(['>=', 'childnum', '3'])->andFilterWhere(['<>', 'marry', '10'])->andFilterWhere(['<=', 'logout', 0]); break; case "三个月内入职": $returnData->andFilterWhere(['>=', 'ingoingdate', $dateThreeMonthAgo])->andFilterWhere(['<=', 'logout', 0]); break; case "三个月内离开单位": $returnData->andFilterWhere(['>', 'logout', 0])->andFilterWhere(['>=', 'e_date', $dateThreeMonthAgo]); break; default: $returnData->andFilterWhere(['<=', 'logout', 0]); break; } $returnData = $returnData->orderBy(['code1' => SORT_ASC])->all(); return Json::encode($returnData); case "crud": $requestAction = Yii::$app->request->post('action'); switch ($requestAction) { case "create": $requestID = key(Yii::$app->request->post('data')); $requestData = Yii::$app->request->post('data')[$requestID]; $model = new Personal(); //块赋值 $model->attributes = $requestData; //返回错误信息给datatable if (!$model->validate()) { $fieldErrors = []; foreach ($model->errors as $name => $status) { $fieldErrors[] = ['name' => $name, 'status' => Json::encode($status)]; } return Json::encode(['fieldErrors' => $fieldErrors, 'data' => []]); } if ($model->save()) { $requestData['id'] = $model->id; $data = []; $data[] = $requestData; return Json::encode(['data' => $data]); } else { var_dump($model->errors); $error = '恢复操作发生意外!'; throw new Exception($error); } case "edit": $editID = array_keys(Yii::$app->request->post('data')); //执行事务,保存必须都成功了才行 $transaction = Personal::getDb()->beginTransaction(); //返回值 $data = []; try { foreach ($editID as $requestID) { $requestData = Yii::$app->request->post('data')[$requestID]; $model = Personal::findOne($requestID); //块赋值 $model->attributes = $requestData; //返回错误信息给datatable if (!$model->validate()) { $fieldErrors = []; foreach ($model->errors as $name => $status) { $fieldErrors[] = ['name' => $name, 'status' => Json::encode($status)]; } return Json::encode(['fieldErrors' => $fieldErrors, 'data' => []]); } $model->save(); //单个字段更新的时候 if (count($requestData) == 1 || !is_array($requestData)) { $requestData = Personal::find()->select(['*'])->where(['id' => $requestID])->one(); } else { $requestData['id'] = $requestID; } $data[] = $requestData; } //提交事务 $transaction->commit(); return Json::encode(['data' => $data]); } catch (\Exception $e) { $transaction->rollBack(); throw $e; } case "remove": //多选则删除全部 用deleteAll()不会触发 event: EVENT_BEFORE_DELETE 和 EVENT_AFTER_DELETE foreach (Yii::$app->request->post('data') as $removeID => $removeData) { Personal::findOne($removeID)->delete(); } return Json::encode($returnData); default: return Json::encode($returnData); } default: throw new \Exception('参数错误!'); } }