2016-07-14 68 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