Password with FirstOrCreate



我想为新用户使用FirstOrCreate。

比如:

$user = User::FirstOrCreate([
        'name' => $request->username,
        'email' => $request->email,
        'password' => User::generatePassword()
    ]);

generatePassword()只生成一个随机的8个字符的字符串。

问题是不起作用,因为它正在寻找具有此密码值的用户。

因此,当没有用户使用此电子邮件时,它可以工作,但当有用户时,它会给我一个约束错误。

修复它最干净的方法应该是什么???

您犯了一个语法错误。::firstOrCreate根据提供的条件进行搜索,如果没有找到,它将创建数据库条目并返回带有该数据的模型。::firstOrNew在不自动保存模型的情况下执行

所以,你会想要这个。

$user = User::firstOrNew([
    'email' => $request->email,
]);

我们不包括namepassword,因为我们没有检查Josh是否josh@stackoverflow.com使用密码foobar123存在,我们只想知道josh@stackoverflow.com有一个帐户。

你的控制器逻辑看起来有点奇怪,因为我们首先想在创建模型之前验证该信息,但我会接受它。

$user = User::firstOrNew([
    'email' => $request->email,
]);
// This model does not have a DB record.
if (!$user->exists)
{
    $user->name = $request->username;
    $user->password = User::generatePassword();
    $user->save();
}
return $user;

根据这个逻辑,我们可以找到一个基于电子邮件的记录。如果记录存在,我们会传递它。如果不存在,我们在创建记录之前为它分配用户名并生成密码,然后传递它。

最新更新