Maison  >  Article  >  cadre php  >  laravel中firstOrNew, firstOrCreate, firstOr et updateOrCreate par défaut

laravel中firstOrNew, firstOrCreate, firstOr et updateOrCreate par défaut

藏色散人
藏色散人avant
2020-05-16 11:53:426033parcourir

La colonne tutorielle d'introduction suivante développée par Laravel vous présentera les méthodes firstOrNew, firstOrCreate, firstOr et updateOrCreate dans laravel. J'espère qu'elle sera utile aux amis dans le besoin !

laravel中firstOrNew, firstOrCreate, firstOr et updateOrCreate par défautSi vous avez déjà utilisé Laravel, vous connaissez probablement les méthodes standard pour créer des modèles Eloquent, telles que make(), create(), update et save(). Laravel propose également d'autres méthodes dont les gens ne réalisent pas qu'elles sont également très utiles pour créer et mettre à jour des modèles. Par conséquent, dans cet article, je souhaite présenter d'autres méthodes et montrer qu'elles peuvent être utiles :

firstOrNew

la méthode firstOrNew trouve le premier qui satisfait certaines contraintes. Modèle , new crée un nouveau modèle lorsqu'aucune donnée ne satisfait aux contraintes.

Vous pouvez prendre le code suivant :

$user = User::where('email', request('email'))->first();
if ($user === null) {
    $user = new User(['email' => request('email')]);
}
$user->name = request('name');
$user->save()

et le réécrire comme :

$user = User::firstOrNew(['email' =>  request('email')]);
$user->name = request('name');
$user->save()

Si vous ne trouvez pas un modèle existant, vous pouvez également le passer par le second paramètre Un tableau de propriétés supplémentaires :

$user = User::firstOrNew(
    ['email' =>  request('email')],
    ['name' => request('name')]
);
$user->save();

firstOrCreate

La méthode firstOrCreate est très similaire à la méthode firstOrNew. Il essaiera de trouver un modèle correspondant en fonction du premier paramètre que vous transmettez. S'il n'est pas trouvé, il créera et enregistrera automatiquement un nouveau modèle en utilisant la valeur transmise dans le deuxième paramètre :

$user = User::firstOrCreate(
    ['email' =>  request('email')],
    ['name' => request('name')]
);
// No call to $user->save() needed

. firstOr

J'ai récemment découvert la méthode firstOr lorsque je pêchais. La méthode firstOr récupérera le premier élément de données si aucune donnée correspondante n'est trouvée, le rappel entrant sera exécuté. Ceci est utile si vous devez effectuer des étapes supplémentaires lors de la création d'un utilisateur, ou si vous souhaitez faire autre chose que créer un nouvel utilisateur :

$user = User::where('email', request('email'))->firstOr(function () {
    $account = Account::create([ //... ]);
    return User::create([
        'account_id' => $account->id,
        'email' => request('email'), 
    ]);
});

updateOrCreate

La méthode updateOrCreate tente de trouver un modèle qui correspond aux contraintes transmises dans le premier argument. Si un modèle correspondant est trouvé, il mettra à jour le modèle avec les propriétés transmises dans le deuxième argument. Si aucun modèle correspondant n'est trouvé, un nouveau modèle sera créé, en transmettant les premier et deuxième paramètres.

Vous pouvez refactoriser ce code :

$user = User::where('email', request('email'))->first();
if ($user !== null) {
    $user->update(['name' => request('name')]);
} else {
    $user = User::create([
      'email' => request('email'),
      'name' => request('name'),
    ]);
}
// Do other things with the User

Utiliser la méthode updateOrCreate :

$user = User::updateOrCreate(
    ['email' =>  request('email')],
    ['name' => request('name')]
);
// Do other things with the User

Conclusion

En résumé, je pense que ces méthodes peut vous aider à simplifier votre code dans certains cas ! Connaissez-vous d’autres conseils utiles et peu connus ? Si oui, n’hésitez pas à me le faire savoir. J'adore découvrir les petits détails qui rendent Laravel si génial.

Pour plus d'articles techniques sur le framework Laravel, veuillez visiter le tutoriel

laravel !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer