Par défaut, la table de données par défaut du modèle Laravel Eloquent comporte deux champs : créé_at et mis à jour_at. Bien entendu, nous pouvons réaliser de nombreuses configurations personnalisées et implémenter de nombreuses fonctions intéressantes. Vous trouverez ci-dessous des exemples.
1. Désactivez les horodatages
Si la table de données ne contient pas ces deux champs, lors de l'enregistrement des données Model::create($arrayOfValues); Erreur SQL. Laravel ne trouve pas ces deux champs lors du remplissage automatique decreated_at/mis à jour_at.
Désactivez le remplissage automatique des horodatages, ajoutez simplement l'attribut précédent au modèle éloquent :
class Role extends Model { public $timestamps = FALSE; // ... 其他的属性和方法 }
2 Modifier la liste des horodatages par défaut
Si. actuel Que dois-je faire si j'utilise une base de données non-Laravel et que ma colonne d'horodatage est nommée différemment ? Peut-être qu'ils sont appelés respectivement create_time et update_time. Félicitations, vous pouvez également le définir comme ceci dans le modèle :
class Role extends Model { const CREATED_AT = 'create_time'; const UPDATED_AT = 'update_time';
3 Modifier le format date/heure de l'horodatage
Le contenu suivant cite la documentation officielle de Laravel :
Par défaut, l'horodatage est automatiquement formaté comme « Y-m-d H:i:s ». Si vous avez besoin d'un format d'horodatage personnalisé, vous pouvez définir la propriété $dateFormat dans votre modèle. Cet attribut détermine le format dans lequel la date est stockée dans la base de données et lorsqu'elle est sérialisée dans un tableau ou JSON :
class Flight extends Model { /** * 日期时间的存储格式 * * @var string */ protected $dateFormat = 'U'; }
4 : Table intermédiaire avec horodatage
Dans une association plusieurs-à-plusieurs, l'horodatage ne sera pas automatiquement renseigné, comme par exemple la table intermédiaire role_user entre la table user users et la table role rôles. Dans ce modèle vous pouvez définir la relation comme ceci :class User extends Model { public function roles() { return $this->belongsToMany(Role::class); } }Ensuite, lorsque vous souhaitez ajouter un rôle à l'utilisateur, vous pouvez l'utiliser comme ceci :
$roleID = 1; $user->roles()->attach($roleID);Par défaut, ce milieu Le tableau ne contient pas d'horodatage. Et Laravel n'essaiera pas de remplir automatiquement create_at/updated_at mais si vous souhaitez enregistrer automatiquement les horodatages, vous devez ajouter create_at/updated_at dans le fichier de migration, puis ajouter ->withTimestamps() dans le fichier de migration. association ;
public function roles() { return $this->belongsToMany(Role::class)->withTimestamps(); }
5. Utilisez Latest() et Old() pour le tri par horodatage
Il existe deux "méthodes de raccourci" pour utiliser le tri par horodatage. Au lieu de :User::orderBy('created_at', 'desc')->get();C'est plus rapide de faire ceci :
User::latest()->get();Par défaut, last() utilise le tri create_at. En conséquence, il existe un plus ancien(), qui sera trié comme créé_at ascendant
User::oldest()->get();Bien sûr, d'autres champs spécifiés peuvent également être utilisés pour trier. Par exemple, si vous souhaitez utiliser update_at, vous pouvez faire ceci :
$lastUpdatedUser = User::latest('updated_at')->first();
6. Ne pas déclencher la modification de update_at
À chaque fois qu'un enregistrement Eloquent est modifié, il conservera automatiquement le champ update_at en utilisant l'horodatage actuel, ce qui est une fonctionnalité intéressante. Mais parfois vous ne voulez pas faire cela, par exemple : lors de l'ajout d'une valeur, vous pensez qu'il ne s'agit pas d'une « mise à jour de ligne entière ». Ensuite, vous pouvez faire la même chose que ci-dessus - désactivez simplement les horodatages, rappelez-vous que c'est temporaire :$user = User::find(1); $user->profile_views_count = 123; $user->timestamps = false; $user->save();
7. Mettre à jour uniquement les horodatages et les horodatages associés
Contrairement à l'exemple précédent, vous devrez peut-être mettre à jour uniquement le champ update_at sans modifier les autres colonnes. Ainsi, la méthode d'écriture suivante n'est pas recommandée :$user->update(['updated_at' => now()]);Vous pouvez utiliser une méthode plus rapide :
$user->touch();Une autre situation, parfois vous ne souhaitez pas seulement mettre à jour le modèle actuel update_at, souhaite également mettre à jour les enregistrements des relations supérieures. Par exemple, si un commentaire est mis à jour, alors vous souhaitez mettre à jour le update_at de la table de publication. Ensuite, vous devez définir l'attribut $touches dans le modèle :
class Comment extends Model { protected $touches = ['post']; public function post() { return $this->belongsTo('Post'); } }
8 Champ d'horodatage automatiquement converti en classe Carbon
Le dernier. Astuce, mais plutôt un rappel car vous devriez déjà le savoir. Par défaut, les champs Created_at et Updated_at sont automatiquement convertis en $dates, vous n'avez donc pas besoin de les convertir en instances Carbon pour utiliser les méthodes de Carbon. Exemple :$user->created_at->addDays(3); now()->diffInDays($user->updated_at);Ça y est, une astuce rapide mais, espérons-le, utile ! Pour des articles plus techniques liés au framework laravel, veuillez visiter la colonne
tutoriel laravel !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!