Maison >cadre php >Laravel >8 conseils pour utiliser les horodatages du modèle Laravel

8 conseils pour utiliser les horodatages du modèle Laravel

藏色散人
藏色散人avant
2020-01-20 13:20:534292parcourir

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer