Mutateurs et Accesseurs Éloquents à Laravel

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..

Créer des accesseurs et des mutateurs dans une classe de modèle

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 migrer

Pour exécuter des exemples dans cet article, vous devez créer prénom et published_at colonnes dans le poster 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 remplacer Nom d'attribut avec un nom d'attribut réel.

le setNameAttribute méthode est appelée avant la valeur de la prénom attribut est enregistré dans la base de données. Pour que les choses restent simples, nous venons d'utiliser le strtolower 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 le ucfirst 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 le Poster modèle. Il convient de définir la valeur de la colonne name sur titre de l'article comme nous avons utilisé le strtolower fonctionner dans le setNameAttribute 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 un Carbone 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éé à et updated_at, à chaque migration de base de données. Et il convertit ces valeurs en un Carbone 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 un Carbone 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é le Poster 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é le getTimestamp 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!