Je suis en train de convertir l'une de nos applications Web de CodeIgniter à Laravel. Cependant, pour le moment, nous ne voulons pas ajouter les champs updated_at
/ created_at
à toutes nos tables car nous avons une classe de journalisation qui fait déjà tout cela de manière plus approfondie pour nous.
Je sais que je peux m'installer $timestamps = false;
:
Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php
Cependant, je préfère ne pas changer un fichier de base pour Laravel, ou que chacun de mes modèles l'ait en haut. Existe-t-il un moyen de désactiver cela ailleurs pour tous les modèles?
$timestamps = false;
pour, par exemple, amorcer une table qui n'a pas de champscreated_at
etupdated_at
.Placez simplement cette ligne dans votre modèle :
public $timestamps = false;
Et c'est tout!
Exemple:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { public $timestamps = false; // }
Pour désactiver les horodatages pour une opération (par exemple dans un contrôleur):
$post->content = 'Your content'; $post->timestamps = false; // Will not modify the timestamps on save $post->save();
Pour désactiver les horodatages pour tous vos modèles , créez un nouveau
BaseModel
fichier:<?php namespace App; use Illuminate\Database\Eloquent\Model; class BaseModel extends Model { public $timestamps = false; // }
Ensuite, étendez chacun de vos modèles avec le
BaseModel
, comme ceci:<?php namespace App; class Post extends BaseModel { // }
la source
Si vous utilisez 5.5.x:
const UPDATED_AT = null;
Et pour le champ 'created_at', vous pouvez utiliser:
const CREATED_AT = null;
Assurez-vous que vous utilisez la dernière version. (Cela a été cassé dans Laravel 5.5.0 et corrigé à nouveau dans 5.5.5).
la source
Si vous avez seulement besoin de désactiver la mise à jour updated_at, ajoutez simplement cette méthode à votre modèle.
public function setUpdatedAtAttribute($value) { // to Disable updated_at }
Cela remplacera la méthode parent setUpdatedAtAttribute (). created_at fonctionnera comme d'habitude. De la même manière, vous pouvez écrire une méthode pour désactiver la mise à jour de created_at uniquement.
la source
Modèle éloquent:
class User extends Model { protected $table = 'users'; public $timestamps = false; }
Ou essayez simplement ceci
$users = new Users(); $users->timestamps = false; $users->name = 'John Doe'; $users->email = '[email protected]'; $users->save();
la source
Si vous souhaitez supprimer les horodatages du modèle existant, comme mentionné précédemment, placez-le dans votre modèle:
public $timestamps = false;
Créez également une migration avec le code suivant dans la
up()
méthode et exécutez-la:Schema::table('your_model_table', function (Blueprint $table) { $table->dropTimestamps(); });
Vous pouvez utiliser
$table->timestamps()
dans votredown()
méthode pour autoriser la restauration.la source
déclarez simplement la
public
variable d'horodatage dans votreModel
tofalse
et tout fonctionnera parfaitement.public $timestamps = false;
la source
Ajoutez cette ligne à votre modèle:
/** * Indicates if the model should be timestamped. * * @var bool */ public $timestamps = false;
la source
Remplacer les fonctions
setUpdatedAt()
etgetUpdatedAtColumn()
dans votre modèlepublic function setUpdatedAt($value) { //Do-nothing } public function getUpdatedAtColumn() { //Do-nothing }
la source
Vous pouvez désactiver temporairement les horodatages
$timestamps = $user->timestamps; $user->timestamps=false; // avoid view updating the timestamp $user->last_logged_in_at = now(); $user->save(); $user->timestamps=$timestamps; // restore timestamps
la source