Если модель создалась успешно, создать еще модель Laravel

У меня вопрос. Мне нужно создавать две модели при регистрации пользователя. Как мне сделать так, чтобы если создание юзера прошло успешно, создавалась еще одна модель и записывала данные в другую таблицу бд. При моем нынешнем подходе получается, что первая модель создается не зависимо от того, успешно ли прошла регистрация.

 protected function create(array $data)
{
    UserAccount::create([
        'account' => $data['account'],
        'subscription_flag' => 0,
    ]);
    
    return UserAuth::create([
        'account' => $data['account'],
        'password' =>$data['password'],
    ]);
}

Ответы (1 шт):

Автор решения: InDevX

Во-первых, нельзя в БД хранить не зашифрованный пароль. Используйте 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'];   
}
→ Ссылка