Laravel firstOrNew どのようにそれが最初または新しいかどうかを確認するには?
2023-10-19 19:57:22
質問
Laravelの機能である
firstOrNew()
を使用して、新しいユーザーを作成したり、既存のユーザーを見つけて更新したりしています。
オブジェクトが作成された後、それが以前から存在していたのか、それとも新しいオブジェクトなのかを知るにはどうしたらよいでしょうか。
アイデアはこのようなものです。
$user = \App\User::firstOrNew([
'email' => $userData->getEmail(),
'name' => $userData->getName(),
]);
if ($user->new) { // some way to check
// user was created now
} else {
//user already existed
}
どのように解決するのですか?
firstOrNew()
この関数は、データベースから最初のレコードを返すか、データベースにまだ存在しない新しいモデルインスタンスをインスタンス化するかのどちらかです。したがって、インスタンスがデータベースから引き出されたのか、それとも新しいインスタンスなのかを確認したい場合は、そのインスタンスに対して
exists
プロパティ
(関数ではない)をモデルに追加します。
if ($user->exists) {
// user already exists and was pulled from database.
} else {
// user created from 'new'; does not exist in database.
}
元の質問は
firstOrNew()
に関するものでしたが、多くの人がここに来て
firstOrCreate()
のために来ている人も多いようです。
firstOrCreate()
は異なるので、別のチェックが必要です。
firstOrCreate()
この関数は、データベースから最初のレコードを返すか、データベースに新しいレコードを作成してそれを返します。新しく作成されたレコードはデータベースに存在することになるので、この関数で
exists
プロパティをチェックすることはできません。なぜなら、両方のインスタンスで真になるからです。しかし
wasRecentlyCreated
プロパティを確認することができます。このプロパティは、現在のモデルインスタンスがデータベース内に作成されたばかりの場合は真、既にデータベース内にある場合は偽となります。
if ($user->wasRecentlyCreated) {
// user just created in the database; it didn't exist before.
} else {
// user already existed and was pulled from database.
}
関連
-
[解決済み】 $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて]
-
[解決済み】PHP フェイタルエラー。未定義の関数mssql_connect()をコールしています。
-
[解決済み] ある文字列が特定の単語を含んでいるかどうかを確認するにはどうすればよいですか?
-
[解決済み] Laravelでカスタムヘルパー関数を作成する方法
-
[解決済み] Laravel Eloquentを使用して複数のWhere句クエリを作成する方法?
-
[解決済み] Laravel レコードが存在するかどうかをチェックする
-
[解決済み] Laravelのファイルパーミッションを設定する方法は?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
-
[解決済み] Laravelにおけるリレーションシップの管理、リポジトリパターンへの準拠
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】++と*+の意味は何ですか?
-
[解決済み] php5パッケージのインストール候補がない (Ubuntu 16.04)
-
[解決済み】ディレクトリ内のファイル数を数える PHP
-
[解決済み】未定義のメソッド mysqli_stmt::get_result を呼び出す。
-
[解決済み] 入力ファイルが指定されていない
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み】MySQLのカラム数が1行目の値数と一致しない【非公開
-
[解決済み] SSLエラー SSL3_GET_SERVER_CERTIFICATE:証明書の検証に失敗しました。
-
[解決済み] PHPの配列を別の配列にコピーする関数はありますか?