web-dev-qa-db-fra.com

Laravel firstOrNew comment vérifier si c'est le premier ou le nouveau?

J'utilise la fonction firstOrNew() de Laravel pour créer un nouvel utilisateur ou pour rechercher et mettre à jour un utilisateur existant.

Comment puis-je savoir, après la création de l'objet, s'il existait auparavant ou s'il s'agit d'un nouvel objet?

L'idée ressemble à ceci:

$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

Vous pouvez vérifier la propriété exists sur le modèle.

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

Vous pouvez vérifier si votre utilisateur a été créé récemment.

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

(Source: Thomas Kim de cette réponse )

10
Pengxer

Si vous avez créé le modèle dans le cycle de vie actuel, l'attribut wasRecentlyCreated du modèle sera défini sur true. Sinon, cet attribut sera défini sur false.

En d'autres termes, disons que vous avez un utilisateur avec le courrier électronique, [email protected]

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

// ce qui précède dumpera false car cette entrée existait déjà sinon true.

1
Diksha Chaudhary

Vous pouvez toujours rechercher un identifiant (ou toute autre clé primaire unique) dans le modèle.

$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...
}

Il est important de garder à l'esprit qu'après avoir persisté le modèle avec $user->save(), vous ne pourrez PAS utiliser $user->id Pour vérifier s'il a été trouvé dans la base de données ou non. En effet, Eloquent remplit tous les attributs du nouveau modèle après son enregistrement.

1
Nizar El Berjawi