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);
}
afterSave срабатывает после каждого сохранения модели. Решить проблему Вашу можно так
if ($this->isAttributeChanged('role')) {
// Что-то делаем
}
У меня есть скрипт рассылающий почтуПримерно такой, здесь не суть приводить полный код , вопрос не в этом
Возникла проблемаНаписал функцию, которая отправляет пост запрос по нажатию на конопки
Пытаюсь разобраться как получить данные товаров, а именно: