在两个表之间移动整行
Moving whole row between two tables
我必须 table 具有相同结构,client_data,new_client_data。
现在我想将整行从 table 移动到另一行。我找到了一种方法,它工作正常,但我想知道是否有更优雅、更干净的方法来做到这一点。
new_client_data / 控制器:
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;
+
+ }
我的问题是:"Is there a way to do this in more elegant way?";
编辑。问题:"Should this moveToClients
method land in the controller?";
还有一种更优雅的方式。我相信您不应该为同一个概念设置两个单独的 table。相反,您已经有一个 client_data
table,您应该添加一个新标志,即 is_new
。默认情况下,将其设置为 1 (true)。每当您需要将客户端修改为客户端时,只需将 is_new
标志更改为 0(假)即可。
我必须 table 具有相同结构,client_data,new_client_data。 现在我想将整行从 table 移动到另一行。我找到了一种方法,它工作正常,但我想知道是否有更优雅、更干净的方法来做到这一点。
new_client_data / 控制器:
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;
+
+ }
我的问题是:"Is there a way to do this in more elegant way?";
编辑。问题:"Should this moveToClients
method land in the controller?";
还有一种更优雅的方式。我相信您不应该为同一个概念设置两个单独的 table。相反,您已经有一个 client_data
table,您应该添加一个新标志,即 is_new
。默认情况下,将其设置为 1 (true)。每当您需要将客户端修改为客户端时,只需将 is_new
标志更改为 0(假)即可。