La version 5.0 de l’intégration officielle de MongoDB pour Laravel est désormais disponible, introduisant des changements majeurs qui alignent mieux cette intégration avec les conventions de Laravel. Pour les développeurs déjà familiers avec Eloquent, cette mise à jour rend l’utilisation de MongoDB plus fluide et intuitive. Explorons les nouvelles fonctionnalités, les améliorations, et les exemples de code associés à cette mise à jour majeure.
Quelles sont les nouveautés ?
Alias de l’ID
Dans les versions précédentes, les développeurs devaient définir manuellement la clé primaire MongoDB (_id) dans leurs modèles Eloquent. Par exemple, il était courant de voir ceci dans vos modèles :
class User extends Eloquent {
protected $primaryKey = '_id';
}
Avec la version 5.0, cet aliasing est désormais automatique. Vous pouvez simplement utiliser $model->id
au lieu de $model->_id
, ce qui simplifie considérablement le code et l’alignement avec les conventions Laravel.
Voici un exemple plus clair :
// Ancienne manière
$user = User::find('615f9a7be1b14f5862a213c7');
echo $user->_id;
// Nouvelle manière avec Laravel MongoDB 5.0
$user = User::find('615f9a7be1b14f5862a213c7');
echo $user->id; // Alias automatique
Cela réduit la complexité et élimine la redondance d’ajouter manuellement une clé primaire MongoDB dans chaque modèle.
Amélioration de la gestion des dates
Une autre grande amélioration concerne la gestion des objets DateTimeInterface
, y compris Carbon. Lorsque vous insérez ou mettez à jour des données, toutes les dates seront automatiquement converties en format UTCDateTime
de MongoDB. De même, lors de la récupération des données, MongoDB convertira automatiquement ses objets UTCDateTime
en dates Carbon avec le fuseau horaire par défaut de Laravel.
Cela signifie que vous n’avez plus besoin de définir manuellement des castings Eloquent pour les dates. Voici un exemple :
// Insertion de données avec Carbon
$post = new Post();
$post->title = "Nouveau Post";
$post->created_at = Carbon::now();
$post->save();
// MongoDB convertit automatiquement 'created_at' en UTCDateTime
Lors de la récupération des données, vous obtiendrez des objets Carbon qui respectent le fuseau horaire de Laravel.
// Récupération des données
$post = Post::find($id);
echo $post->created_at->format('Y-m-d H:i:s'); // Affiche l'heure dans le fuseau horaire Laravel
Cette gestion automatique simplifie les manipulations de dates dans MongoDB, tout en restant cohérente avec l’approche Laravel pour les dates.
Résultats des requêtes sous forme d’objets
Une modification importante concerne la manière dont les résultats des requêtes sont renvoyés. Auparavant, MongoDB renvoyait des tableaux associatifs. Désormais, les résultats sont renvoyés sous forme d’objets stdClass
, ce qui permet d’accéder aux propriétés comme vous le feriez avec des objets PHP normaux.
Exemple de code avant la 5.0 :
// Ancienne manière avec des tableaux associatifs
$user = User::find($id);
echo $user['name'];
Nouvelle approche :
// Nouvelle manière avec des objets stdClass
$user = User::find($id);
echo $user->name;
Cela rend l’interaction avec les données plus fluide et cohérente avec le reste de l’écosystème Laravel.
Simplification de la personnalisation des modèles
Une autre mise à jour notable concerne la manière dont vous personnalisez les collections dans vos modèles Eloquent. Dans les versions antérieures, vous deviez définir $collection
pour spécifier le nom de la collection MongoDB. Désormais, cela a été remplacé par $table
, ce qui est plus aligné avec la convention Laravel.
Exemple :
class Post extends Eloquent {
// Ancienne manière
protected $collection = 'posts_collection';
// Nouvelle manière avec Laravel MongoDB 5.0
protected $table = 'posts_collection';
}
Cette modification réduit la confusion entre les terminologies MongoDB et Laravel, créant ainsi une expérience de développement plus homogène.
Suppression des providers de services spécifiques MongoDB
Avec cette mise à jour, plusieurs providers de services spécifiques à MongoDB ont été retirés. Il s’agit notamment des fournisseurs suivants :
- Auth\PasswordResetServiceProvider
- MongoDBQueueServiceProvider
- Queue\Failed\MongoFailedJobProvider
Ces fournisseurs ne sont plus nécessaires, car la classe MongoDB\Connection est désormais pleinement compatible avec les classes de Laravel. Cela signifie que MongoDB fonctionne de manière transparente avec les fonctionnalités existantes de Laravel, telles que les jobs, la gestion des échecs de jobs, et l’authentification.
Mise à jour des connexions et des logs
La classe MongoDB\Laravel\Connection a été remplacée par MongoDB\Connection, ce qui améliore la compatibilité avec les composants internes de Laravel. De plus, les logs de requêtes utilisent désormais les événements de monitoring de MongoDB, ce qui offre une meilleure visibilité et traçabilité des opérations MongoDB dans votre application Laravel.
Installation et Configuration de Laravel MongoDB 5.0
La bibliothèque MongoDB peut être installée en utilisant cette ligne de commande :
composer require mongodb/laravel-mongodb:^5.0