web-dev-qa-db-fra.com

Désactiver les horodatages Eloquent de Laravel

Je suis en train de convertir l'une de nos applications Web de CodeIgniter à Laravel. Cependant, pour le moment, nous ne souhaitons pas ajouter les champs updated_at/created_at à toutes nos tables, car nous avons déjà une classe de journalisation qui effectue tout cela plus en profondeur.

Je suis conscient que je peux définir $timestamps = false; dans:

Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php

Cependant, je préférerais ne pas changer de fichier de base pour Laravel ou laisser tous mes modèles le placer au sommet. Est-il possible de désactiver cette fonctionnalité ailleurs pour tous les modèles?

154
projectxmatt

Vous devez soit déclarer public $timestamps = false; dans chaque modèle, soit créer un modèle de base, le définir à cet endroit et faire en sorte que tous vos modèles l'étendent au lieu d'éloquent. N'oubliez pas que les tableaux croisés dynamiques DOIVENT avoir un horodatage si vous utilisez Eloquent.

Mise à jour: notez que les horodatages ne sont plus REQUIS dans les tableaux croisés dynamiques après Laravel v3.

Mise à jour: vous pouvez également désactiver les horodatages en supprimant $table->timestamps() de votre migration.

306
bgallagh3r

Il vous suffit de placer public $timestamps = false; dans votre modèle.

91
PhilMarc

Si vous devez uniquement 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.

21
Sampath Perera

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 êtes sur la dernière version. (Cela a été cassé dans Laravel 5.5.0 et corrigé à nouveau dans 5.5.5).

17
Sampath Perera

Modèle éloquent:

class User extends Model    
{      
    protected $table = 'users';

    public $timestamps = false;
}

ou simplement essayer ceci

$users = new Users();
$users->timestamps = false;
$users->name = 'John Doe';
$users->email = '[email protected]';
$users->save();
8
srmilon

Si vous souhaitez supprimer les horodatages du modèle existant, comme indiqué précédemment, placez-le dans votre modèle:

public $timestamps = false;

Créez également une migration avec le code suivant dans la méthode up() et exécutez-la:

Schema::table('your_model_table', function (Blueprint $table) {
    $table->dropTimestamps();
});

Vous pouvez utiliser $table->timestamps() dans votre méthode down() pour autoriser la restauration.

6
realplay

déclarez simplement la variable public timestamps dans votre Model à false et tout fonctionnera parfaitement.

public $timestamps = false;

5
Shahrukh Anwar

ajouter cette ligne dans votre modèle

écraser la variable existante $timestampstrue à false

/**
 * Indicates if the model should be timestamped.
 *
 * @var bool
 */
public $timestamps = false;
2
Jignesh Joisar

Remplacer les fonctions setUpdatedAt() et getUpdatedAtColumn() dans votre modèle

public function setUpdatedAt($value)
{
   //Do-nothing
}

public function getUpdatedAtColumn()
{
    //Do-nothing
}
1
Krishan