Modèle de référentiel dans Laravel : nettoyez votre code en désordre

DEV - 28/12
Le problème Avez-vous déjà vu des contrôleurs comme celui-ci ? classe publique OrderController étend Controller { ...

Le problème Avez-vous déjà vu des contrôleurs comme celui-ci ?

public class OrderController extends Controller { public function show($id) { $order = Order::with(['customer', 'items.product']) ->where('id', $id) ->first(); return réponse()->json($ordre); } public function getUserOrders($userId) { // Même requête dupliquée ! 😱 $orders = Order::with(['customer', 'items.product']) ->where('customer_id', $userId) ->get(); return réponse()->json($commandes); } }
Entrer en mode plein écran Quitter le mode plein écran

Problèmes :

🔴 Requêtes dupliquées partout 🔴 Contrôleurs étroitement couplés à Eloquent 🔴 Impossible de tester sans base de données 🔴 Logique métier mélangée à l'accès aux données

La solution : modèle de référentiel

Étape 1 : Créer une interface

interface OrderRepositoryInterface { public function find(int $id): ?Order; fonction publique findWithRelations(int $id): ?Order; fonction publique findByCustomer(int $customerId) : Collection ; }
Entrer en mode plein écran Quitter le mode plein écran

Étape 2 : implémenter le référentiel

la classe OrderRepository implémente OrderRepositoryInterface { protected $model; public function __construct(Commande $model) { $this->model = $model; } public function findWithRelations(int $id): ?Order { return $this->model ->with(['customer', 'items.product']) ->find($id); } public function findByCustomer(int $cu...
[Courte citation de 8% de l'article original]
Loading...