Mise à jour sans toucher les horodatages (Laravel)
Est-il possible de mettre à jour un utilisateur sans toucher les horodateurs?
Je ne veux pas désactiver l'horodatage complètement..
grtz
- Il n'y a pas de méthode pour remplacer les horodatages par défaut. Je ne suis pas sûr, mais avez-vous essayé DB::raw($yourRawQuery)?
Vous devez vous connecter pour publier un commentaire.
Désactiver temporairement:
Vous pouvez les réactiver après l'enregistrement.
C'est un Laravel 4 et 5 uniquement fonction et ne s'applique pas à Laravel 3.
timestamp
avant d'enregistrer, dans Laravel 3 la propriété est statique, donc je ne sais pas si vous pouvez ou pas de changement dans l'exécution, regardez le code: github.com/laravel/laravel/blob/3.0/laravel/database/eloquent/...$something->save(['timestamps'=>false]);
et il est tout simplement ignoré. Merci beaucoup de l'homme!Dans Laravel
5.2
, vous pouvez définir le champ public$timestamps
àfalse
comme ceci:Ou vous pouvez passer des options en tant que paramètre de la
save()
fonction :Pour une compréhension plus profonde de la façon dont cela fonctionne, vous pouvez jeter un oeil à la classe
\Illuminate\Database\Eloquent\Model
, dans la méthodeperformUpdate(Builder $query, array $options = [])
:Les horodatages des champs sont mis à jour uniquement si la propriété publique
timestamps
est égal àtrue
ouArr::get($options, 'timestamps', true)
retournetrue
(ce qui n'est, par défaut, si le$options
tableau ne contient pas la clétimestamps
).Dès que l'un de ces deux rendements
false
, letimestamps
champs ne sont pas mis à jour.À ajouter à Antonio Carlos Ribeiro réponse
Si votre code exige que les horodatages de-l'activation de plus de 50% du temps - peut-être que vous devez désactiver la mise à jour automatique et manuelle de l'accès il.
Dans éloquent lorsque vous étendez le éloquent modèle, vous pouvez désactiver l'horodatage en mettant
Mise à JOUR
public $timestamps = false;
à l'intérieur de votre modèle.
public $timestamps = false;
public
, pasprotected
(visibilité)?Échantillons ci-dessus fonctionne cool, mais seulement pour objet unique (une seule ligne par le temps).
C'est facile façon de désactiver temporairement les horodatages si vous voulez mettre à jour l'ensemble de la collection.
Maintenant, vous pouvez simplement appeler quelque chose comme ceci:
Pour Laravel 5.x utilisateurs qui tentent d'effectuer une
Model::update()
appel, pour le faire fonctionner, vous pouvez utiliserComme le Modèle::fonction de mise à jour ne prend pas un deuxième argument de plus.
ref: laravel 5.0 api
Testé et de travail sur la version 5.2.
J'ai couru dans la situation de devoir faire une mise à jour massive, qui implique une jointure, donc
updated_at
était à l'origine en double colonne de conflits. Je l'ai réparé avec ce code sans avoir besoin d'un champ d'application:Si vous avez besoin de mettre à jour modèle unique requêtes:
ou
Si vous avez besoin de mettre à jour plusieurs modèle requêtes utilisent
au lieu de
Vous pouvez également utiliser cette syntaxe:
Type: InvalidArgumentException
Message: Unexpected data found.