Dans cet article, nous allons passer en revue les mutateurs et les accesseurs de l'ORM Eloquent dans le framework Web Laravel. Après l’introduction, nous allons passer en revue quelques exemples pour comprendre ces concepts..
Dans Laravel, les mutateurs et les accesseurs vous permettent de modifier les données avant qu'elles ne soient enregistrées et extraites d'une base de données. Pour être précis, le mutateur vous permet de modifier les données avant leur enregistrement dans une base de données. D'autre part, l'accesseur vous permet de modifier les données après leur extraction d'une base de données..
En fait, le modèle de Laravel est le lieu central où vous pouvez créer des méthodes de mutateur et d’accesseur. Et bien sûr, il est agréable d’avoir toutes vos modifications dans un seul endroit plutôt que de les disperser sur différents endroits..
Comme vous connaissez maintenant le concept de base des mutateurs et des accesseurs, développons un exemple concret pour le démontrer..
Je suppose que vous connaissez le modèle Eloquent de Laravel et nous utiliserons le modèle Post comme point de départ de notre exemple. Si vous n'avez pas créé le Poster
modèle encore, utilisons le artisan
commande pour le créer.
Fabrication artisanale php: modèle Post --migration
Cela devrait créer un fichier de modèle à app / Post.php
comme indiqué ci-dessous.
Remplaçons le contenu de ce fichier par le suivant.
attributs ['name'] = strtolower ($ value);Comme nous avons utilisé le
--migration
En option, il convient également de créer une migration de base de données associée. Juste au cas où vous ne le sauriez pas, vous pouvez exécuter la commande suivante pour créer une table dans la base de données..php artisan migrerPour exécuter des exemples dans cet article, vous devez créer
prénom
etpublished_at
colonnes dans leposter
table. Quoi qu'il en soit, nous n'entrerons pas dans les détails du sujet de migration, car cela sort du cadre de cet article. Nous allons donc revenir aux méthodes qui nous intéressent.Tout d'abord, passons à la méthode du mutateur.
/ ** * Définir le titre de l'article. * * @param chaîne $ valeur * @ chaîne retour * / fonction publique setNameAttribute ($ valeur) $ this-> attributs ['name'] = strtolower ($ value);Comme nous en avons discuté précédemment, les mutateurs sont utilisés pour modifier les données avant leur enregistrement dans une base de données. Comme vous pouvez le constater, la syntaxe de la méthode du mutateur est la suivante:
set nom-attribut Attribut
. Bien sûr, vous devez remplacerNom d'attribut
avec un nom d'attribut réel.le
setNameAttribute
méthode est appelée avant la valeur de laprénom
attribut est enregistré dans la base de données. Pour que les choses restent simples, nous venons d'utiliser lestrtolower
fonction qui convertit le titre du message en minuscule avant son enregistrement dans la base de données.De cette manière, vous pouvez créer des méthodes de mutateur sur toutes les colonnes de votre table. Passons maintenant à la méthode de l'accesseur.
Si des mutateurs sont utilisés pour modifier des données avant leur enregistrement dans une base de données, la méthode d'accès est utilisée pour modifier les données après leur extraction dans une base de données. La syntaxe de la méthode d'accès est la même que celle du mutateur, sauf qu'elle commence par le mot-clé get au lieu du mot-clé set.
Passons par la méthode de l'accesseur
getNameAttribute
./ ** * Obtenir le titre du message. * * @param string $ value * @return string * / fonction publique getNameAttribute ($ value) return ucfirst ($ value);le
getNameAttribute
La méthode sera appelée une fois que la valeur de l'attribut name aura été extraite de la base de données. Dans notre cas, nous venons d'utiliser leucfirst
méthode pour modifier le titre de l'article.Et c'est ainsi que vous êtes censé utiliser des accesseurs dans vos modèles. Jusqu'ici, nous venons de créer des méthodes de mutateur et d'accès, et nous les testerons dans la section à venir..
Mutateurs en action
Créons un contrôleur à
app / Http / Controllers / MutatorController.php
afin que nous puissions tester la méthode du mutateur que nous avons créée dans la section précédente.setAttribute ('nom', 'titre de poste'); $ post-> save ();En outre, vous devez créer un itinéraire associé dans le
routes / web.php
fichier pour y accéder.Route :: get ('mutator / index', 'MutatorController @ index');dans le
indice
méthode, nous créons un nouveau poste en utilisant lePoster
modèle. Il convient de définir la valeur de la colonne name sur titre de l'article comme nous avons utilisé lestrtolower
fonctionner dans lesetNameAttribute
méthode mutatrice.Date mutateurs
En plus du mutateur dont nous avons parlé précédemment, le modèle Eloquent fournit quelques mutateurs spéciaux qui vous permettent de modifier les données. Par exemple, le modèle Eloquent de Laravel est livré avec une option spéciale.
$ dates
propriété qui vous permet de convertir automatiquement les colonnes souhaitées en unCarbone
instance de date.Au début de cet article, nous avons créé le
Poster
modèle, et le code suivant faisait partie de cette classe.… / ** * Attributs à convertir en dates. * * @var array * / protected $ dates = ['created_at', 'updated_at', 'published_at'];…Comme vous le savez probablement, Laravel crée toujours deux champs liés à la date,
créé à
etupdated_at
, à chaque migration de base de données. Et il convertit ces valeurs en unCarbone
instance de date aussi bien.Supposons que vous ayez quelques champs dans une table que vous voudriez traiter comme champs de date. Dans ce cas, il vous suffit d’ajouter des noms de colonnes dans
$ dates
tableau.Comme vous pouvez le voir dans le code ci-dessus, nous avons ajouté le
published_at
colonne dans le$ dates
tableau, et il s'assure que la valeur de cette colonne sera convertie en unCarbone
instance de date.Accesseurs en action
Pour voir les accesseurs en action, allons de l'avant et créons un fichier contrôleur
app / Http / Controllers / AccessorController.php
avec le contenu suivant.prénom; // vérifie la propriété de date echo $ post-> published_at; // comme nous avons muté la colonne published_at en Carbon date, nous pouvons également utiliser le paramètre suivant echo $ post-> published_at-> getTimestamp (); sortie;Aussi, créons un itinéraire associé dans le
routes / web.php
fichier pour y accéder.Route :: get ('accessor / index', 'AccessorController @ index');dans le
indice
méthode, nous avons utilisé lePoster
modèle pour charger un exemple de poste en premier lieu.Ensuite, nous inspectons la valeur de la colonne name, et elle devrait commencer par une lettre majuscule car nous avons déjà défini la méthode d'accès.
getNameAttribute
pour cette colonne.Pour aller plus loin, nous avons inspecté la valeur de la
publié
_à
colonne, et qui devrait être traitée comme une date. De ce fait, Laravel le convertit en une instance Carbon afin que vous puissiez utiliser toutes les méthodes utilitaires fournies par cette bibliothèque. Dans notre cas, nous avons utilisé legetTimestamp
méthode pour convertir la date en un horodatage.Et cela nous amène à la fin de cet article!
Conclusion
Aujourd'hui, nous avons exploré les concepts de mutateurs et d'accesseurs de l'ORM Eloquent à Laravel. C'est un bon moyen de modifier les données avant qu'elles ne soient enregistrées et extraites d'une base de données..
Pour ceux d'entre vous qui débutent avec Laravel ou qui souhaitent développer leurs connaissances, leur site ou leur application avec des extensions, nous pouvons étudier de nombreuses choses sur le marché Envato..
N'hésitez pas à partager vos impressions en utilisant le flux ci-dessous!