FirstOrCreate的密码

问题描述:

我想为新用户使用FirstOrCreate。FirstOrCreate的密码

就像是:

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

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

事情是不工作,因为它正在寻找具有此密码值的用户。

因此,它适用于没有用户使用此电子邮件,但是当它有给我一个约束错误。

什么应该是最清洁的方法来解决它?

+0

你为什么要在搜索时使用'password'字段?用户应该能够通过电子邮件和用户名进行搜索。 – nextt1

你犯了一个语法错误。 ::firstOrCreate根据提供的条件进行搜索,如果未找到,则会创建数据库条目并返回包含该数据的模型。 ::firstOrNew是不是没有自动保存模型。

所以,你会想这个。

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

我们不包括namepassword,因为我们没有使用密码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; 

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