FirstOrCreate的密码
问题描述:
我想为新用户使用FirstOrCreate。FirstOrCreate的密码
就像是:
$user = User::FirstOrCreate([
'name' => $request->username,
'email' => $request->email,
'password' => User::generatePassword()
]);
generatePassword()只生成一个随机8个字符的字符串字符串。
事情是不工作,因为它正在寻找具有此密码值的用户。
因此,它适用于没有用户使用此电子邮件,但是当它有给我一个约束错误。
什么应该是最清洁的方法来解决它?
答
你犯了一个语法错误。 ::firstOrCreate
根据提供的条件进行搜索,如果未找到,则会创建数据库条目并返回包含该数据的模型。 ::firstOrNew
是不是没有自动保存模型。
所以,你会想这个。
$user = User::firstOrNew([
'email' => $request->email,
]);
我们不包括name
或password
,因为我们没有使用密码foobar123存在检查,看看是否与乔希[email protected],我们只是想知道,如果[email protected]有一个帐户。
您的控制器逻辑看起来有点不可思议,因为我们首先要验证之前创建模型,但我会滚动它。
$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;
有了这个逻辑,我们找到了一个基于电子邮件的记录。如果记录存在,我们通过它。如果没有,我们为其分配一个用户名并在创建记录之前为其生成密码,然后传递它。
你为什么要在搜索时使用'password'字段?用户应该能够通过电子邮件和用户名进行搜索。 – nextt1