我必须使用相同结构的表,client_data,new_client_data。 现在我想将一行从一个表移到另一个表。我找到了一种方法,它工作正常,但我想知道是否有更优雅和干净的方法来做它。
new_client_data / controller:
public function actionPromotion($id)
+ {
+ $model = $this->findModel($id);
+
+ $clientData = new ClientData;
+ $newClientNumber = $clientData->setNewClientNumber();
+
+ $clientContacts = new OClientContacts;
+
+
+ if ($model->load(Yii::$app->request->post())) {
+ if($this->moveToClients(Yii::$app->request->post(), $model->id) & $clientContacts->moveContacts($id)){
+ return $this->redirect(['index']);
+ } else {
+ return $this->render('promprep', [
+ 'model' => $model,
+ 'newClientNumber' => $newClientNumber,
+ ]);
+ }
+ } else {
+ return $this->render('promprep', [
+ 'model' => $model,
+ 'newClientNumber' => $newClientNumber,
+ ]);
+ }
+ }
它是从标准actionUpdate构建的基本控制器方法。 如果用户将正确提交所有发布数据,则函数将所有发布数据传递给该控制器中的另一个方法。 (我也想知道是否不应该放在模特中)。
+ public function moveToClients($post, $id){
+ $ClientData = new ClientData;
+
+ $ClientData->name = $post['OClientData']['name'];
+ $ClientData->clientNumber = $post['OClientData']['clientNumber'];
+ $ClientData->abr= $post['OClientData']['abr'];
+ $ClientData->adress = $post['OClientData']['adress'];
+ $ClientData->city = $post['OClientData']['city'];
+ $ClientData->postal = $post['OClientData']['postal'];
+ $ClientData->phone = $post['OClientData']['phone'];
+ $ClientData->fax = $post['OClientData']['fax'];
+ $ClientData->email = $post['OClientData']['email'];
+ $ClientData->nip = $post['OClientData']['nip'];
+ $ClientData->krs = $post['OClientData']['krs'];
+ $ClientData->regon = $post['OClientData']['regon'];
+ $ClientData->www = $post['OClientData']['www'];
+ $ClientData->description = $post['OClientData']['description'];
+ $ClientData->isNewRecord = true;
+ $ClientData->id = null;
+
+ if($ClientData->save()){
+ $this->actionDelete($id);
+ return true;
+ }
+ return false;
+
+ }
我的问题是:“有没有办法以更优雅的方式做到这一点?”
编辑。问题:“这个moveToClients
方法应该落在控制器中吗?”;
答案 0 :(得分:3)
有一种更优雅的方式。我相信你不应该为同一个概念设置两个单独的表。相反,您已经有一个client_data
表,您应该添加一个新标志,即is_new
。默认情况下,将其设置为1(true)。每当您需要将客户端修改为客户端时,只需将is_new
标志更改为0(false)。