FirstOrCreate的密码

时间:2016-04-29 05:08:36

标签: laravel

我想将FirstOrCreate用于新用户。

就像那样:

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

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

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

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

解决问题的最简洁方法是什么?

1 个答案:

答案 0 :(得分:1)

你犯了一个语法错误。 ::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;

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