2016-07-14 3 views
0

ランダムな文字列名を使用して、後でIDを使用する偽のユーザーを作成しようとしています。私は通過する変数のいくつかを認識していないエラーに遭遇しています。念のため、私はfirstOrNewを使用しています最初のOOnNew()クエリは、渡されたパラメータを認識しません

 $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; 

そのランダムなユーザー名を持つユーザーがすでに入力されている、私はちょうどそのIDを使用します。その場合には:以下の私のコードです。でも

私は$username$firstName、および$lastNameすべてのテストを通じて、これらのオブジェクト内のデータを持っていることを知っているが、それは、フィールドが空であることを信じているので、何らかの理由で、私は(「」)'username'上の重複エラーに関するエラーを取得し、私の変数はわかりませんが。

言い換えれば、SQLステートメントは電子メールとパスワードを渡すだけで、他の3つの変数は渡しません。何かご意見は?


エラーメッセージ:

[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

$ usernameの値は何ですか? –

+0

^これはモデルの塗りつぶし可能なフィールドですか? –

答えて

2

わかりましたので、あなたは、次の値、'username' => $username, 'firstname' => $firstName, 'lastname' => $lastName,を渡しているようには見えません...(あなたの元のエラーが掲載さ)の誤差に基づいて...

あなたがそうのように、fillableの下でこれらを持って、あなたのUserモデルで確認してください:

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

私はこれがあなたの問題の原因であると思います。

+1

これはまさにそれだった。助けてくれてありがとう! – Chase

+0

問題ありません!私はこのミスを100回以上やりました。 –

1

方法firstOrNew()は、指定されたすべての列と値のペアを使用してデータベースレコードを特定しようとしています。たとえば、電子メールなどの一意のキーを作成する属性のみを使用する必要があります。

モデルが新しい場合(existsがfalse)モデルのexistsプロパティをチェックして残りのフィールドを記入して保存します。

+0

これは知っておくと良いことです。ありがとう。 – Chase

関連する問題