2016-07-14 40 views
0

我想创建一组伪造用户,使用随机字符串名称,我将稍后使用这些ID。我遇到了一个错误,它不能识别我通过的一些变量。下面是我的代码:雄辩firstOrNew()查询不识别传递给它的参数

 $password = bcrypt($this->generateRandomString(15)); 

     $user = User::firstOrNew([ 
      'email' => ($firstName . '@company.com'), 
      'password' => $password, 
      'username' => $username, 
      'firstname' => $firstName, 
      'lastname' => $lastName, 
     ]); 
     $user->save(); 
     $userIds[] = $user->id; 

以防万一,我使用firstOrNew与随机用户名的用户已输入,在这种情况下,我就用它的ID。

我知道$username$firstName$lastName都在通过测试这些对象的数据,但不管是什么原因,我得到关于上'username'重复错误的错误,因为它认为,字段为空(“”),甚至尽管我知道我的变量不是。

换句话说,SQL语句只传递电子邮件和密码,而不传递其他三个变量。有什么想法吗?


错误消息:

[Illuminate\Database\QueryException]                            
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '[email protected]' for key 'users_email_unique' (SQL: insert into 
`users` (`email`, `password`, `username`, `updated_at`, `created_at`) values ([email protected], y$rx8R0N5dVAibjpXxV0OF4uGGb7lradsl2xME 
20ymMvv2YPaUWv3oq, olliepritsak, 2016-07-14 18:10:10, 2016-07-14 18:10:10)) 

[PDOException]                        
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'users_username_unique' 
+0

什么是错误? –

+0

什么是$用户名值? –

+0

^这是您模型上的可填充字段吗? –

回答

2

好了,根据错误(原来的错误发布)......看起来并不像你传递下列值,'username' => $username, 'firstname' => $firstName, 'lastname' => $lastName, ...

User模型确认,你有这些fillable下,像这样:

protected $fillable = [ 
    ... 
    'username', 
    'firstname', 
    'lastname', 
]; 

我认为这是你的问题源于的地方。

+1

是的,这就是它。谢谢您的帮助! – Chase

+0

没问题!我犯了这个错误百倍。 –

1

方法firstOrNew()正在尝试使用所有给定的列/值对来查找数据库记录。例如,您应该只使用制作唯一密钥的属性,例如电子邮件。

然后,您需要检查模型的exists属性,以便在模型为新的时候填写其余字段(exists为false)并保存。

+0

这是很好的知道。谢谢。 – Chase