Как сделать выбор компании аккаунта?

161
11 декабря 2018, 12:00

yii2-advanced, есть аккаунт, к нему нужно привязать id компании.

Проблема в том что я делаю это через update, который работает с моделью пользователей и моделью таблицы ролей, а в таблице пользователей уже есть метод afterSave, который присваивает пользователю роль user, и если при update я меняю только fabricators_id, но не меняю роль, то выскакивает ошибка Integrity constraint violation: 1062 Duplicate entry 'user-5' for key 'PRIMARY'.

Я понимаю что это за ошибка (попытка создать дубликат записи), но как ее обойти? Как оформить проверку ,было ли изменение роли или нет? Или afterSave срабатывает всегда?

Или лучше сделать 2 разных представления для смены роли и смены компании аккаунта?

actionUpdate:

public function actionUpdate($id){
    $model = $this->findModel($id);
    $usermodel = AuthAssignment::find()->where(['user_id' => $id])->one();
    if ($usermodel->load(Yii::$app->request->post()) && $usermodel->validate()) {
        if ($usermodel->save() && $model->save()){
            return $this->redirect(['view', 'id' => $model->id]);
        }
    }
    return $this->render('update', [
        'model' => $model,
        'usermodel' => $usermodel,
    ]);
}

afterSave:

public function afterSave($insert, $changedAttributes){
    parent::afterSave($insert, $changedAttributes);
    $auth = Yii::$app->authManager;
    $user = $auth->getRole('user');
    $auth->assign($user, $this->id);
}

Form-view:

<?php echo $form->field($usermodel, 'item_name')->dropDownList(AuthItem::getParam('name')) ?>
<?php
echo $form->field($model, 'fabricators_id')->dropDownList(Fabricators::getParam('name'))
?>

Метод getParam (одинаковый для обеих моделей):

public static function getParam($param){
    return ArrayHelper::map(self::find()->all(), 'id', $param);
}
Answer 1

afterSave срабатывает после каждого сохранения модели. Решить проблему Вашу можно так

if ($this->isAttributeChanged('role')) {
        // Что-то делаем
    }
READ ALSO
Как сделать паузу в выполнении скрипта на php

Как сделать паузу в выполнении скрипта на php

У меня есть скрипт рассылающий почтуПримерно такой, здесь не суть приводить полный код , вопрос не в этом

178
jQuery post запрос отправляется лишь один раз

jQuery post запрос отправляется лишь один раз

Возникла проблемаНаписал функцию, которая отправляет пост запрос по нажатию на конопки

142
Не могу разобраться как получить данные товаров Woocommerce(Wordpress)

Не могу разобраться как получить данные товаров Woocommerce(Wordpress)

Пытаюсь разобраться как получить данные товаров, а именно:

163
Алгоритм вывода людей и мест работы

Алгоритм вывода людей и мест работы

Есть список людей и список их мест работыНапример так:

134