La colonne tutorielle suivante de Laravel partagera avec vous 8 conseils sur la façon d'utiliser les horodatages des modèles Laravel. Voyez si vous ne les avez jamais utilisés. Sinon, collectez-les maintenant, j'espère que cela sera utile à tout le monde !
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. Voici quelques exemples.
1. Désactivez les horodatages
Si la table de données ne contient pas ces deux champs, Model::create($arrayOfValues); - vous verrez une erreur SQL lors de l'enregistrement des données. Laravel ne trouve pas ces deux champs lors du remplissage automatique decreated_at/mis à jour_at.
Pour désactiver le remplissage automatique des horodatages, ajoutez simplement l'attribut précédent au modèle Eloquent :
class Role extends Model { public $timestamps = FALSE; // ... 其他的属性和方法 }
2 Modifiez la liste des horodatages par défaut
Si vous utilisez actuellement une base de données de type non Laravel, c'est-à-dire votre. colonne d'horodatage Que dois-je faire si la méthode de dénomination est différente ? 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 fait référence à la documentation officielle de Laravel :
Par défaut, l'horodatage est automatiquement formaté comme suit. '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 de stockage de la date dans la base de données, et le format une fois sérialisée dans un tableau ou JSON :
class Flight extends Model { /** * 日期时间的存储格式 * * @var string */ protected $dateFormat = 'U'; }
4 : table intermédiaire avec horodatage
Quand dans un plusieurs-à-. De nombreuses associations, L'horodatage n'est pas automatiquement renseigné, comme 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, cette table intermédiaire 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 ajoutercreated_at/updated_at dans le fichier de migration, puis ajouter ->withTimestamps();
public function roles() { return $this->belongsToMany(Role::class)->withTimestamps(); }
dans l'association du modèle 5. Utilisez Latest() et Oldest() pour le tri par horodatage
Il existe deux "méthodes de raccourci" pour utiliser le tri par horodatage.
Au lieu de cela :
User::orderBy('created_at', 'desc')->get();
C'est plus rapide de faire ceci :
User::latest()->get();
User::latest()->get();
默认情况,latest() 使用 created_at 排序。
与之对应,有一个 oldest() ,将会这么排序 created_at ascending
User::oldest()->get();
当然,也可以使用指定的其他字段排序。例如,如果想要使用 updated_at,可以这么做:
$lastUpdatedUser = User::latest('updated_at')->first();
6、不触发 updated_at 的修改
无论何时,当修改 Eloquent 记录,都将会自动使用当前时间戳来维护 updated_at 字段,这是个非常棒的特性。
但是有时候你却不想这么做,例如:当增加某个值,认为这不是 “整行更新”。
那么,你可以一切如上 —— 只需禁用 timestamps,记住这是临时的:
$user = User::find(1); $user->profile_views_count = 123; $user->timestamps = false; $user->save();复制代码
7、仅更新时间戳和关联时间戳
与上一个例子恰好相反,也许您需要仅更新 updated_at 字段,而不改变其他列。
所以,不建议下面这种写法:
$user->update(['updated_at' => now()]);
您可以使用更快捷的方法:
$user->touch();
User::oldest()->get();
Bien sûr, vous pouvez également utiliser d'autres spécifiés Tri sur le terrain. Par exemple, si vous souhaitez utiliser update_at, vous pouvez faire ceci : class Comment extends Model { protected $touches = ['post']; public function post() { return $this->belongsTo('Post'); } }6. Ne déclenchez pas la modification de update_at Chaque fois qu'un enregistrement Eloquent est modifié, le champ update_at sera automatiquement maintenu en utilisant l'horodatage actuel. C'est une fonctionnalité très intéressante. Mais parfois vous ne voulez pas faire cela, par exemple : lorsque vous ajoutez une certaine valeur, vous pensez qu'il ne s'agit pas d'une « mise à jour d'une ligne entière ». Donc, vous pouvez tout faire comme ci-dessus - désactivez simplement les horodatages, rappelez-vous que c'est temporaire :
$user->created_at->addDays(3); now()->diffInDays($user->updated_at);
7. Mettre à jour uniquement les horodatages et les horodatages associés
Exactement à l'opposé de l'exemple précédent, vous n'avez peut-être besoin de mettre à jour que les horodatages. champ update_at sans modifier les autres colonnes. 🎜🎜La méthode d'écriture suivante n'est donc pas recommandée : 🎜🎜$user->update(['updated_at' => now()]);
🎜🎜Vous pouvez utiliser une méthode plus rapide : 🎜 🎜$user->touch();
🎜🎜Une autre situation, parfois vous souhaitez non seulement mettre à jour le update_at du modèle actuel, mais également mettre à jour les enregistrements de la relation supérieure. 🎜🎜Par exemple, si un commentaire est mis à jour, vous souhaitez alors mettre à jour le update_at de la table de publication. 🎜🎜Ensuite, vous devez définir l'attribut $touches dans le modèle : 🎜rrreee🎜🎜8. Champ Timestamp automatiquement converti en classe Carbon 🎜🎜🎜Dernier conseil, mais plutôt un rappel car vous devriez déjà le savoir. 🎜🎜Par défaut, les champs create_at et update_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. 🎜🎜Par exemple : 🎜rrreee🎜Pour plus de connaissances sur la programmation, veuillez visiter : 🎜Vidéo de programmation🎜 ! ! 🎜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!