1. ホーム
  2. laravel

[解決済み] ファースト・オア・クリエイト

2023-06-02 05:11:35

質問

使っていることは知っています。

User::firstOrCreate(array('name' => $input['name'], 'email' => $input['email'], 'password' => $input['password']));

最初にユーザが存在するかどうかをチェックし、存在しない場合は作成しますが、どのようにチェックするのでしょうか?例えば、名前ではなく、メールアドレスが存在するかどうかだけをチェックすることはできますか。2人のユーザーが同じ名前を持っているかもしれませんが、メールアドレスは一意である必要がありますから。

どのように解決するのですか?

firstOrCreate() は、その前にすべての引数が存在するかどうかをチェックします。 finds にマッチするかどうかを調べます。もし全ての引数がマッチしない場合、モデルの新しいインスタンスが作成されます。

もし、特定のフィールドについてのみチェックしたい場合は firstOrCreate(['field_name' => 'value']) を使ってください。これは、マッチした最初の項目を返すか、マッチしない場合は新しい項目を作成します。

との違いは firstOrCreate()firstOrNew() :

  • firstOrCreate() は、一致するものがない場合、自動的に新しいエントリを作成します。それ以外の場合は、一致した項目を表示します。
  • firstOrNew() は、マッチしなかった場合に作業するための新しいモデルインスタンスを与えますが、明示的にそうしたときだけデータベースに保存されます ( save() を呼び出した時のみです。) それ以外の場合は、マッチしたアイテムを提供します。

どちらかを選択することは、何をしたいかによります。初めて保存される前にモデルのインスタンスを変更したい場合(たとえば name や何らかの必須フィールドの設定など) は firstOrNew() . もし、引数を使うだけで、モデルインスタンスを修正することなく、すぐにデータベースに新しいモデルインスタンスを作成することができるのであれば firstOrCreate() .