Trouver ou créer avec Eloquent
J'ai récemment commencé à travailler avec Laravel et Éloquentet je me demandais à propos de l'absence de trouver ou de créer de l'option pour les modèles. Vous pouvez toujours écrire, par exemple:
$user = User::find($id);
if (!$user) {
$user = new User;
}
Cependant, n'est-il pas un meilleur moyen de trouver ou de créer? Il semble trivial dans l'exemple, mais pour les situations plus complexes, il serait vraiment utile d'obtenir soit un enregistrement existant et le mettre à jour ou créer un nouveau.
source d'informationauteur charleyh
Vous devez vous connecter pour publier un commentaire.
Ci-dessous est à l'origine accepté réponse pour: laravel-4
Il existe déjà une méthode
findOrFail
disponible dansLaravel
et lorsque cette méthode est utilisée, elle jetteModelNotFoundException
sur un échec, mais dans votre cas, vous pouvez le faire en créant une méthode dans votre modèle, par exemple, si vous avez unUser
modèle alors que vous venez de mettre cette fonction dans le modèleÀ partir de votre contrôleur, vous pouvez utiliser
Si un utilisateur avec
id
od5
est exixts ensuite, il sera mis à jour, sinon un nouvel utilisateur est créé, mais leid
seralast_user_id + 1
(auto incrémenté).C'est une autre façon de faire la même chose:
Au lieu de créer une méthode statique, vous pouvez utiliser un
scope
dans le Modèle, la méthode dans leModel
serascopeMethodName
et appelModel::methodName()
même comme vous l'avez fait dans la méthode statique, par exempleMise à jour:
La
firstOrCreate
est disponible dansLaravel 5x
la réponse est trop vieux et il a été donné pourLaravel-4.0
dans2013
.Dans Laravel 5.3, la
firstOrCreate
méthode a la déclaration suivante:Ce qui signifie que vous pouvez l'utiliser comme ceci:
De l'utilisateur de l'existence sera vérifiée uniquement via email, mais lors de sa création, le nouvel enregistrement permettra d'économiser à la fois e-mail et nom.
Les Docs de l'API
Sinon, dans ce cas, vous pouvez également utiliser Laravel de la fonction et de la recherche de l'id comme un attribut, c'est à dire
Laravel 4 modèles disposent d'une
findOrNew
méthode qui fait ce que vous avez besoin de:Dans Laravel 5:
Il existe deux méthodes que vous pouvez utiliser pour créer des modèles en masse de l'affectation d'attributs:
firstOrCreate
etfirstOrNew
.Le
firstOrCreate
méthode va tenter de localiser un enregistrement de base de données à l'aide de la colonne donnée paires valeur. Si le modèle ne peut pas être trouvé dans la base de données, un dossier sera inséré avec les attributs.Le
firstOrNew
méthode, commefirstOrCreate
va tenter de localiser un enregistrement dans la base de données correspondant à la donnée attributs. Cependant, si un modèle n'est pas trouvé, un nouvelle instance du modèle sera retourné. Notez que le modèle renvoyé parfirstOrNew
n'a pas encore été sauvegardés dans la base de données. Vous aurez besoin de faire appel enregistrer manuellement pour persister:De trouver ou de Nouveaux basée sur la clé primaire id
Première ou Nouvelle fondée sur la non-clé primaire unique déposée
Première ou Nouvelle fondée sur la non-clé primaire plusieurs déposé
Vous pouvez utiliser firstOrCreate (Il travaille avec Laravel 4.2)
retourne trouvé instance ou d'une nouvelle instance.