我有相同的结构表,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中构建的基本控制器方法。如果用户将正确提交所有post数据,那么函数将所有post数据传递给该控制器中的另一个方法。(我也想知道如果不应该放在模型代替)。
+ 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
方法应该降落在控制器中吗?";
有一种更优雅的方法。我认为你不应该对同一个概念有两个单独的表。相反,您已经有了一个client_data
表,您应该添加一个新标志,即is_new
。缺省情况下,设置为1 (true)。当您需要将客户端修改为客户端时,只需将is_new
标志更改为0 (false)。