Qu’est-ce que Eloquent ORM ?
Laravel eloquent ORM est livré avec le framework Laravel pour fournir un moyen facile, sans tracas et simple de travailler avec une base de données. Certaines des fonctionnalités qui ont fait sa renommée sont la suppression douce, le timestamp, l’implémentation d’ActiveRecord, la gestion de bases de données multiples, le chargement rapide, les observateurs de modèle, les événements de modèle, et bien plus encore. Les relations Eloquent sont identiques aux méthodes des classes de modèles Eloquent. Les relations sont de puissants constructeurs de requêtes lorsqu’elles sont définies comme des méthodes, ce qui permet de chaîner les méthodes et d’obtenir des capacités de requêtes puissantes.
Comment Eloquent ORM fonctionne-t-il ?
Eloquent ORM est célèbre pour son implémentation d’Active Record pour travailler avec des bases de données. Active Record est un modèle architectural dans lequel chaque modèle réalisé dans l’architecture MVC correspond à une table dans la base de données. Vous pouvez facilement créer des données de relation dans votre base de données et travailler avec le modèle orienté objet à l’aide d’Eloquent. Les requêtes SQL sont si fastidieuses et prennent tant de temps lorsqu’il s’agit de coder. Laravel Eloquent vous donne la liberté d’effectuer des opérations de base de données courantes sans longues requêtes SQL. Les modèles ont rendu l’insertion, la mise à jour, la suppression et la synchronisation de plusieurs bases de données très faciles. Il vous suffit de définir les tables de la base de données et la relation entre elles et votre travail est terminé.
Démarrer avec Eloquent
Laravel est livré avec une interface de ligne de commande intégrée, appelée Artisan Console. Pilotée par le composant de contrôle symphony, elle offre un moyen facile d’utiliser la ligne de commande pendant la phase de développement de l’application.
Avant d’aller plus loin dans cet article, configurez la connexion à la base de données dans le fichier config/database.php.
Avant de commencer à utiliser le modèle Eloquent, vérifiez que vous avez installé Laravel ou non. Si vous ne l’avez pas fait, vous pouvez le télécharger à partir de getcomposer.org
Si vous voulez voir la liste des commandes disponibles dans Artisan, tapez la commande suivante :
php artisan list
Après cela, toutes les commandes avec une courte description seront disponibles sur votre écran. Si vous souhaitez obtenir de l’aide pour certaines de ces commandes, il vous suffit de taper la commande précédée de « help ». Exemple :
php artisan help migrate
Création de Modèles éloquents
Avant de faire quoi que ce soit, vous devez créer un modèle dans la base de données. Les modèles vous aident dans l’ensemencement, le bain, etc. C’est le modèle qui communique avec la base de données. Il vous permet également d’interroger votre base de données et de l’ensemencer avec des données. Le modèle est généralement stocké dans App\Models la raison étant juste pour le bien du code bien documenté. Nous préférons aussi cette pratique mais c’est totalement votre choix, la seule condition est qu’il doit être chargé automatiquement en fonction de votre code source. composer.json fichier. Tous les modèles Eloquent étendent Illuminate\Database\Eloquent\Model classe. La commande de base pour créer des modèles est `make:model` Commande artisanale :
php artisan make: model Student
La syntaxe de base pour définir un modèle est :
class User extends Model {}
La migration de la base de données peut également être générée lors de la création du modèle en ajoutant simplement l’élément `-m` ou `-migration` dans la commande précédente.
php artisan make:model Student--migration
php artisan make:model Flight -m
Les semences, les usines, les contrôleurs et divers types de classes peuvent être générés en passant des paramètres appropriés à la commande `make:model` Commande Artisan. Des exemples sont donnés ci-dessous :
php artisan make:model Flight --factory
php artisan make:model Flight -f
php artisan make:model Flight --seed
php artisan make:model Flight -s
php artisan make:model Flight --controller
php artisan make:model Flight -c
De plus, ces commandes peuvent être combinées pour créer plusieurs classes à la fois.
php artisan make:model Flight -mfsc
Certaines des conventions de base du modèle que nous devons garder à l’esprit :
- Nom de la table: Par convention, le nom de la table doit être une majuscule, les noms au pluriel sont utilisés pour les noms de table de toute base de données. Par exemple, si le nom du modèle est Étudiant alors le nom de la table devrait être étudiants. Mais si le nom du modèle contient plusieurs mots, utilisez le trait de soulignement.
- Clé primaire: Eloquent suppose la clé primaire avec l’attribut id. Cependant, vous pouvez remplacer cette propriété en utilisant `$primaryKey`.
- Timestamp: Par défaut `created_at` et `updated_at` sont automatiquement gérés par Eloquent. Si vous ne voulez pas qu’ils soient gérés automatiquement, vous pouvez modifier les paramètres suivants `$timestamp` à false. Si vous souhaitez personnaliser le format de la date et de l’heure, utilisez la propriété `$dateFormat` propriété de votre modèle.
Mise à jour de et suppression d’éléments
Mise à jour de
Pour mettre à jour un modèle, vous devez le récupérer, modifier l’attribut que vous voulez changer, puis appeler la méthode de sauvegarde. Le site `updated_at` sera automatiquement modifiée, il faut donc la modifier manuellement.
$student = Student::find(1);
$student->email = ‘xyz@example.com';
$student>save();
Les mises à jour en masse peuvent également être effectuées pour plusieurs modèles qui correspondent à une requête donnée.
Suppression d’un modèle existant
Pour supprimer un modèle, il suffit d’appeler la fonction delete :
$student = Student::find(1);
$student>delete();
Suppression par touche :
Student::destroy(1);
Student::destroy([1, 2, 3]);
Student::destroy(1, 2, 3);
Vous pouvez également effectuer une suppression sur la base d’une requête.
$affectedRows = Student::where('votes', '>', 100)->delete();
Related modèle
Dans toute base de données, il peut y avoir des modèles liés. Lorsque deux modèles ou plus dépendent l’un de l’autre pour leur valeur, ils sont appelés modèles liés. Par exemple, si vous souhaitez ajouter un nouveau commentaire à un message, au lieu de mettre à jour le modèle post_id manuellement, vous pouvez directement mettre à jour à partir de et son modèle parent
$comment = new Comment(['message' => 'A new comment.']);
$post = Post::find(1);
$comment = $post->comments()->save($comment);
Associé modèles
Ces modèles peuvent être utilisés pour mettre à jour des modèles à l’aide de la méthode d’association, qui définit une clé étrangère sur le modèle. Vous pouvez également associer des modèles ayant des relations multiples.
Modèle Événements
Chaque fois que nous voulons accéder aux différentes étapes du cycle de vie d’un modèle, comme l’enregistrement, la mise à jour ou la suppression, un événement est déclenché, appelé événement de modèle. Les différents événements sont : sauvegardé, supprimé, mise à jour, suppression, mise à jour, restauration, restauration. Par exemple, lorsque vous insérez un nouvel élément, l’événement creating/created est déclenché, mais si l’élément n’est pas nouveau, l’événement uploading/uploaded est déclenché.
Annulation de l’opération d’enregistrement via un événement
Si l’événement renvoie false, l’action sera annulée. Les événements peuvent être n’importe quoi, comme supprimer, mettre à jour, créer, supprimer.
Student::creating(function($student)
{
if ( ! $student>isValid()) return false;
});
Comment enregistrer des écouteurs d’événements
Comme dans toutes les langues, un événement a besoin d’un fournisseur de services pour être enregistré, ici aussi, il est possible d’enregistrer des auditeurs d’événements. EventServiceProvider qui sert d’emplacement pour enregistrer les liaisons d’événements de modèle.
Exemple :
public function boot(DispatcherContract $events)
{
parent::boot($events);
Student::creating(function($student)
{
//
});
}
Modèle Observateurs
Les observateurs de modèle nous aident à gérer les événements de modèle. Une classe d’observateurs peut avoir des méthodes correspondant à divers événements de modèle.
class StudentObserver {
public function saving($model)
{
//
}
public function saved($model)
{
//
}
}
Une autre façon d’enregistrer une méthode d’observateur est avec l’aide de la méthode observe
User::observe(new UserObserver);
Génération d’urls de modèle
Les URLs de modèle correspondent à la forme unique de l’url en passant le modèle à la méthode route ou action. Lorsqu’un modèle est transmis à la méthode route ou action, sa clé primaire est insérée dans l’URI.
Route::get('student/{student}', 'StudentController@show');
action('StudentController@show', [$student]);
Ici, l’identifiant de l’étudiant sera inséré dans l’url. Si vous souhaitez remplacer une autre propriété dans l’URL générée, vous devez remplacer l’attribut getRouteKey dans votre modèle.
public function getRouteKey()
{
return $this->slug;
}
Plus d’informations sur Laravel Eloquent Features
Convertir en tableaux/JSON
Lorsque vous construisez une API, le résultat est très probablement en JSON, ce qui vous oblige à convertir vos relations en JSON/array. Laravel Eloquent répond également à cet objectif. Pour convertir les relations d’un modèle en un tableau, vous pouvez toArray() méthodes.
$student = Student::with('roles')->first();
return $student->toArray();
Pour convertir une collection entière d’un modèle en un tableau, les méthodes suivantes peuvent être utilisées :
return Student::find(1)->toJson();
Maintenant, nous allons voir comment retourner un modèle à partir de la route. Chaque fois qu’un modèle est converti en chaîne, il sera converti en JSON, de sorte que vous pouvez retourner des objets Eloquent directement à partir des routes.
Route::get('student', function()
{
return Student::all();
});
Certains numéros protégés comme `personal_id` ou le mot de passe doivent être cachés ou protégés. Pour ce faire, vous devez ajouter `$hidden` dans votre modèle ;
Attribut casting
Si vous voulez convertir le type de données d’une variable, une option consiste à utiliser un mutateur pour chacun des attributs, ce qui peut prendre du temps et entraîner des bogues. Une autre option est d’utiliser la méthode du casting pour la variable en question. Vous pouvez ajouter l’attribut à la propriété cast de votre modèle. Les autres types de cast acceptables sont integer, float, double, real, object, string, array.
Voici un exemple.
protected $casts = [
'is_student' => 'boolean',
];
Dans cet exemple, même si est_étudiant a un type de données différent, mais lorsque vous y accéderez, il sera renvoyé sous la forme d’un fichier de type booléen.
L’extraction de tableau est très utile lorsque vous devez travailler avec une colonne de base de données de type JSON sérialisé. JSON sérialisé signifie l’encodage d’un objet dans une chaîne. Si l’une de vos colonnes a un JSON sérialisé, l’implémentation de l’array cast le convertira automatiquement en tableau PHP, lorsque vous le récupérerez dans votre modèle eloquent.
protected $casts = [
'options' => 'array',
];
Mutateurs de date
Carbon est une extension PH internationale de DateTime. Eloquent concerts le created_at et updated_at à Carbon qui possède plusieurs méthodes utiles et étend la classe DateTime de PHP. Une personnalisation facile est disponible si vous ne voulez pas de mutation automatique. Il vous suffit de remplacer la méthode getDates classe. Pour désactiver complètement la mutation de date, il suffit de retourner un tableau vide dans la classe `getDates` méthode. Un exemple est donné ci-dessous :
public function getDates()
{
return ['created_at'];
}
Si une colonne est considérée comme une date, vous avez quatre possibilités : vous pouvez valoriser un timestamp UNIX, une chaîne de date (Y-m-d), une date-heure ou une instance DateTime/Carbon.
Accesseurs et Mutateurs
Tout comme l’obtention et la définition de valeurs dans n’importe quel langage, les accesseurs et les mutateurs permettent de formater les attributs Eloquent avant de les récupérer ou de les définir sur les instances du modèle. La différence entre les accesseurs et les mutateurs est que les accesseurs sont utilisés pour récupérer les données alors que les mutateurs sont responsables de la modification des données.
Pour définir un assesseur, il suffit d’appeler `getFooAttribute` sur votre modèle, mais la nomenclature de la méthode doit suivre la mise en majuscule, peu importe si le nom de la colonne est en minuscule.
class User extends Model {
public function getFirstNameAttribute($value)
{
return ucfirst($value);
}
}
La définition d’un mutateur peut se faire de la même manière : utilisez simplement `setFooAttribute` et oui, encore une fois, il faut respecter la casse de chameau.
class User extends Model {
public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = strtolower($value);
}
}
Soft Suppression de
La suppression douce ne signifie pas la suppression de la base de données mais un timestamp séparé. `deleted_at` est ajouté correspondant à l’enregistrement. Vous pouvez effectuer une suppression douce dans votre modèle en appliquant la propriété SoftDeletes au modèle.
use IlluminateDatabaseEloquentSoftDeletes;
class User extends Model {
use SoftDeletes;
protected $dates = ['deleted_at'];
}
softDeletes() peut être utilisée pour ajouter des deleted_at propriété de la migration. La migration n’est rien d’autre que la gestion de votre base de données en PHP plutôt qu’en SQL.
$table->softDeletes();
Dans certains cas, vous pouvez vouloir afficher les résultats de la suppression douce lorsque vous appelez une requête. Pour cela, vous pouvez utiliser withTrashed() dans la requête.
Si vous souhaitez afficher uniquement les modèles supprimés en douceur dans les résultats, utilisez la méthode onlyTrashed() méthode.
$student = Student::onlyTrashed()->where('account_id', 1)->get();
Après tant d’opérations, si vous voulez que les modèles supprimés en douceur reviennent en mode actif, utilisez la méthode de restauration. méthode.
$student->restore();
restore() peut également être utilisée directement dans la requête.
Student::withTrashed()->where('account_id', 1)->restore();
Maintenant, après la suppression douce, si vous voulez supprimer définitivement le modèle de votre base de données, alors utilisez forceDelete() méthode
$student->posts()->forceDelete();
Pour vérifier si un modèle est supprimé ou non, vous pouvez utiliser la méthode suivante trashed().
if ($student->trashed())
{
//Todo
}
Conclusion
Laravel est l’un des frameworks les plus célèbres de PHP. Laravel eloquent fournit un moyen très facile de communiquer avec les bases de données. Dans cet article, nous avons couvert certaines des fonctionnalités importantes d’Eloquent de Laravel. Il y a beaucoup plus de fonctionnalités d’Eloquent, vous pouvez en apprendre davantage à leur sujet. ici. Suivez le lien et découvrez toutes les fonctionnalités impressionnantes de Laravel Eloquent.