0
votes

Incrément éloquent Laravel sans mettre à jour des horodatages

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();


2 commentaires

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.


3 Réponses :


4
votes

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:

public $ horodatage = false; à 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 :: ()

, 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.

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.

afin que vous puissiez faire: xxx

Cependant, je vais Personnellement, préférez utiliser un moyen éloquent de faire cela si donné un choix.

Mise à jour

Vous pouvez maintenant réussir la fonction d'incrémentation pour spécifier quelles autres colonnes vous voudrait mettre à jour.

donc cela deviendra: xxx


5 commentaires

Je crois que c'est protégé $ horodatage = faux; 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 , mais je vais coller à ce que j'ai alors.



1
votes

Vous pouvez encapsuler tout le processus dans une méthode du modèle.


0 commentaires

3
votes

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');


0 commentaires