Есть форма/модель. В функции происходит сохранение 2х моделей, User и Token.
Сохранение происходит. Но!!! Если не удается сохранить модель Token, записи в базу не добавляются, но при следующей успешной записи в модели User, id нового пользователя будет больше на прошлое количество неверных сохранений.
Допустим последний пользователь с id=10, было две неверных попытки сохранения, и затем прошло удачное сохранение, id =13.
Это нормально или у меня косяк кода?
<?php
namespace frontend\modules\account\models\forms;
use frontend\modules\account\models\Token;
use Yii;
use common\models\User;
use yii\base\Model;
class RegistrationForm extends Model
{
public $nickname;
public $email;
public $password;
/**
* Validation rules
* @inheritdoc
* @return array
*/
public function rules()
{
return [
// nickname rules
'nicknameTrim' => ['nickname', 'trim'],
// email rules
'emailTrim' => ['email', 'trim'],
// password rules
'passwordTrim' => ['password', 'trim'],
];
}
/**
* Field name
* @inheritdoc
* @return array
*/
public function attributeLabels()
{
return [
'nickname' => 'Никейм',
'email' => 'E-mail',
'password' => 'Пароль',
];
}
/**
* Form name
* @inheritdoc
* @return string
*/
public function formName()
{
return 'registration-form';
}
/**
* Registrations function
* @return bool
* @throws \Exception
* @throws \Throwable
*/
public function registration()
{
if ( !$this->validate() ) {
return false;
}
$transaction = Yii::$app->db->beginTransaction();
try {
$user = new User();
$user->nickname = $this->nickname;
$user->email = $this->email;
$user->generatePassword($this->password);
$user->save();
$token = new Token();
$token->user_id = $user->getPrimaryKey();
$token->save();
$transaction->commit();
} catch (\Exception $e) {
$transaction->rollBack();
}
return true;
}
}