Comment faire pour incrémenter d'une colonne à l'aide de Éloquent Modèle dans Laravel 4
Je ne suis pas sûr de savoir comment augmenter la valeur dans une colonne à l'aide Éloquent Modèle dans Laravel 4?
C'est ce que j'ai actuellement et je ne suis pas sûr de savoir comment corriger cela.
$visitor = Visitor::where('token','=','sometoken')->first();
if(isset($visitor)){
$visitor->increment('totalvisits');
}else{
Visitor::create(array(
'token'=>'sometoken',
'totalvisits'=>0
));
}
Avec le Générateur de Requêtes que nous pourrions faire à l'aide de
DB::table('visitors')->increment('totalvisits');
Votre code fonctionne très bien sur ma fin, est-il rien de plus que ce que vous avez posté?
Devrais-je appeler la méthode save après l'incrémentation méthode est appelée?
Vous n'avez pas besoin de la 'increment' méthode, car il est vraiment destiné à être utilisé sur une requête où vous n'auriez pas à faire des économies par la suite. Vous pouvez également aller $utilisateur->totalvisits = $utilisateur->totalvisits + 1; $utilisateur->save();
Je ne pense pas que Éloquent de l'incrément est atomique. Donc, à partir de l'heure de votre requête pour le visiteur et puis il se couche, il peut avoir été modifié par un autre visiteur. Si votre nombre de visiteurs sera inférieur à ce qu'il devrait être.
Je ne suis pas sûr si Laravel 4 était différent, mais en 5.3, qui je suis en ce moment, le
Devrais-je appeler la méthode save après l'incrémentation méthode est appelée?
Vous n'avez pas besoin de la 'increment' méthode, car il est vraiment destiné à être utilisé sur une requête où vous n'auriez pas à faire des économies par la suite. Vous pouvez également aller $utilisateur->totalvisits = $utilisateur->totalvisits + 1; $utilisateur->save();
Je ne pense pas que Éloquent de l'incrément est atomique. Donc, à partir de l'heure de votre requête pour le visiteur et puis il se couche, il peut avoir été modifié par un autre visiteur. Si votre nombre de visiteurs sera inférieur à ce qu'il devrait être.
Je ne suis pas sûr si Laravel 4 était différent, mais en 5.3, qui je suis en ce moment, le
increment
méthode semble être atomique: $columns = array_merge([$column => $this->raw("$wrapped + $amount")], $extra);
return $this->update($columns);
OriginalL'auteur Abishek | 2013-05-16
Vous devez vous connecter pour publier un commentaire.
Ressemble le code que j'ai posté travaillé après tout
OriginalL'auteur Abishek
Avant un corrigé il y a quelques semaines la
increment
méthode réellement est tombé sur le générateur de requêtes et appelé sur l'ensemble de la table, qui n'était pas souhaitable.Appelle maintenant
increment
oudecrement
sur une instance du modèle va effectuer l'opération uniquement sur ce modèle d'instance.OriginalL'auteur Jason Lewis
Laravel 5 a maintenant atomique incrément:
qui essentiellement des œuvres comme:
Ci-dessous est vieille réponse pour Laravel 4, où le construit-dans l'augmentation était séparée de sélectionner et de mettre à jour ce qui bien sûr conduit à des bugs avec plusieurs utilisateurs:
Si vous souhaitez un décompte précis de vos visiteurs en assurant la mise à jour est atomique, alors essayez de mettre ceci dans votre Visiteur modèle:
Je l'utilise pour un changement de système de tag, mais pourraient travailler pour vos besoins.
Personne ne sait quoi remplacer le "$this->where('id',$this->id)", parce que depuis l'affaire avec $this Visiteur, il devrait être redondante.
increment
méthode. Découvrez Allume le générateur de requêtes de documentation, leincrement
fonction est à la ligne 2177.voir laravel.com/docs/5.6/queries#increment-and-decrement
bon endroit j'ai mis à jour ma réponse
OriginalL'auteur malhal