J'ai un modèle éloquent sur lequel je voudrais incrémenter un attribut unique. Jusqu'à présent, j'utilise la ligne de code suivante pour y parvenir:
$thread = Thread::where('id', $threadId)->first(); $thread->timestamps = false; $thread->like_count++; $thread->save();
3 Réponses :
Si vous n'avez pas besoin d'horodatages du tout, vous pouvez le désactiver une fois pour tout pour ce modèle particulier à l'aide de:
, si vous souhaitez que les personnes handicapées pour une requête particulière, alors comme vous l'avez mentionnée dans votre question est d'une manière. P> Une autre solution consiste à utiliser Query Builder. Maintenant, les horodaques sont les fonctionnalités associées à Eloquent. Toutefois, si vous mettez à jour à l'aide de Simple Query Builder, il ne met pas à jour les horodatages. P> afin que vous puissiez faire: p> Cependant, je vais Personnellement, préférez utiliser un moyen éloquent de faire cela si donné un choix. p> Vous pouvez maintenant réussir la fonction d'incrémentation pour spécifier quelles autres colonnes vous voudrait mettre à jour. p> donc cela deviendra: p> public $ horodatage = false; code> à l'intérieur de votre modèle. Cela ajoutera une étape supplémentaire que lorsque vous souhaitez que l'horodatage soit mis à jour, vous devez l'affecter de valeur manuellement comme
$ objet-> créé_at = carbone :: () code> p>
Je crois que c'est protégé $ horodatage = faux; code> Je ne préférerais pas les variables internes du modèle à être publiques. Mais, quand même, travaillerait.
Son chemin la documentation Laravel suggère ici . Il semble que ce soit public.
Ahan! Cela fait longtemps que je faisais le dernier avaravail. Content d'avoir marché ici: D
C'est comme ça depuis Laravel 4.2 Haha: D Mais je ne peux pas être d'accord plus d'accord que le public a été publié à moi aussi, j'ai également vérifié avant de poster en réponse
Merci d'avoir énuméré les options. J'espérais qu'il y aurait un moyen de faire le faire via la méthode code> code>, mais je vais coller à ce que j'ai alors.
Vous pouvez encapsuler tout le processus dans une méthode du modèle. P>
Vieux fil mais avec Laravel 7 et PHP7.4, vous pouvez faire
Thread::where('id', $threadId) ->where(function($q) {$q->getModel()->timestamps = false;}) ->increment('like_count');
Vous avez besoin des horodatages? Vous pouvez les désactiver dans votre modèle.
Oui, j'ai besoin que les horodatages soient mis à jour sur chaque requête, mais celui-ci.