/** * edit particular client information * @param [type] $id [description] * @return [type] [description] */ public function actionEdit($id) { $client = $this->findModel($id); $groups = new Group(); // find groups selecting $groups_clients = GroupClient::find()->where(['clients_id' => $id])->all(); $selected = []; foreach ($groups_clients as $key => $value) { $selected[] = $value->group->id; } $groups->id = $selected; if ($client->load(Yii::$app->request->post()) && $client->validate()) { // get post variable of GroupClient $list_groups = Yii::$app->request->post()['Group']['id']; // groups is required if (!empty($list_groups)) { // save client table first $client->save(); // delete all existing group of this user in groupsclients GroupClient::deleteAll(['clients_id' => $id]); // each group will be saved with a corresponding client which be saved before foreach ($list_groups as $key => $group) { $groups_clients = new GroupClient(); $groups_clients->clients_id = $client->id; $groups_clients->groups_id = $group; $groups_clients->save(); } // everything is ok, redirect to clients list page $errors = $groups_clients->getErrors(); if (empty($errors)) { return $this->redirect(['/clients']); } } else { $groups->addError('id', 'Groups can not blank'); } } return $this->render('edit', ['client' => $client, 'groups' => $groups, 'groups_clients' => $groups_clients]); }