web-dev-qa-db-ja.com

Laravel firstOrNew最初か新しいかを確認する方法?

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
}
44
raphadko

モデルのexistsプロパティを確認できます。

if ($user->exists) {
    // user already exists
} else {
    // user created from 'new'; does not exist in database.
}
71
patricus

ユーザーが最近作成されたかどうかを確認できます。

if ($user->wasRecentlyCreated) {
    // new user
} else {
    // user already exists
}

(出典: Thomas Kim from この回答

10
Pengxer

現在のライフサイクルでモデルを作成した場合、モデルのwasRecentlyCreated属性はtrueに設定されます。それ以外の場合、その属性はfalseに設定されます。

言い換えると、test @ yopmail.comというメールを持っているユーザーがあるとしましょう。

$user = User::firstOrCreate(['email' => '[email protected]']);
var_dump($user->wasRecentlyCreated);

//このエントリは既に存在するため、上記はfalseをダンプします。

1

モデル内のID(または他の一意の主キー)をいつでも確認できます。

_$user = \App\User::firstOrNew([
    'email' => $userData->getEmail(),
    'name' => $userData->getName(),
]);

if($user->id) {
    // The user exists and was retrieved from the database...
}

if (!$user->id) {
    // The user was not found in the database and a new User model was created...
}
_

$user->save()を使用してモデルを永続化した後は、_$user->id_を使用してデータベースで検出されたかどうかを確認できないことに注意してください。これは、Eloquentが新しいモデルの保存後にすべての属性を設定するためです。

1