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?
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.
Il vous suffit de placer public $timestamps = false;
dans votre modèle.
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.
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).
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();
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.
déclarez simplement la variable public
timestamps dans votre Model
à false
et tout fonctionnera parfaitement.
public $timestamps = false;
ajouter cette ligne dans votre modèle
écraser la variable existante
$timestamps
true à false
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
Remplacer les fonctions setUpdatedAt()
et getUpdatedAtColumn()
dans votre modèle
public function setUpdatedAt($value)
{
//Do-nothing
}
public function getUpdatedAtColumn()
{
//Do-nothing
}