Если модель создалась успешно, создать еще модель Laravel
У меня вопрос. Мне нужно создавать две модели при регистрации пользователя. Как мне сделать так, чтобы если создание юзера прошло успешно, создавалась еще одна модель и записывала данные в другую таблицу бд. При моем нынешнем подходе получается, что первая модель создается не зависимо от того, успешно ли прошла регистрация.
protected function create(array $data)
{
UserAccount::create([
'account' => $data['account'],
'subscription_flag' => 0,
]);
return UserAuth::create([
'account' => $data['account'],
'password' =>$data['password'],
]);
}
Ответы (1 шт):
Во-первых, нельзя в БД хранить не зашифрованный пароль. Используйте Hash:
use Illuminate\Support\Facades\Hash;
...
$password = Hash:make($request->password);
Или, хотя бы, Crypt:
use Illuminate\Support\Facades\Crypt;
...
$password = Crypt:encryptString($request->password);
Разница в том, что Hash это "безвозвратное" шифрование пароля, вы не можете его дешифровать, а Crypt это шифрование с возможностью дешифровать его:
$password = Crypt:decryptString($user->password);
Теперь же, касательно вашего вопроса, при создании вы просто в переменную записываете модель
$user = UserAuth::create([
'account' => $data['account'],
'password' => Hash::make($data['password']),
]);
И теперь можно добавить проверку
if ($user) {
UserAccount::create([
'account' => $user->account,
'subscription_flag' => 0,
]);
}
И, всё в месте:
use Illuminate\Support\Facades\Hash;
...
protected function create(array $data)
{
$user = UserAuth::create([
'account' => $data['account'],
'password' => Hash::make($data['password']),
]);
if ($user) {
UserAccount::create([
'account' => $data['account'],
'subscription_flag' => 0,
]);
return $user;
}
return ['error' => 'User not created'];
}