Les scopes dans les modèles Laravel
Dans les modèles, l’utilisation des scopes va permettre d’ajouter de la logique dans le modèle.
On va donc avoir ce qui peut modifier la requête du Query Builder
de ce modèle dans celui-ci et pas ailleurs.
Scope ?
Imagine tu as une table posts (et son modèle Post), et que dans cette table tu as une colonne vote (je t’explique pas pourquoi cette colonne, t’as compris). Pour récupérer les posts ayant reçu plus de 100 votes, ça donnerait :
Mais en mettant ça dans un scope, cela devient :
Joli non ?
Date de création dans un intervalle donné
Imagine (encore) que tu as ce même modèle Post et que tu veux récupérer les entrées créées entre 2 dates. Si tu fonces tête baissée, ça donne :
Ok, ça marche. Sauf que created_at
est un datetime
, donc la partie heure/minute/seconde passe à la trappe et tu
perds 24h sur la dernière journée. Ah! le piège!
Bon en fait, le plus simple serait de ne pas utiliser de BETWEEN
dans ce cas mais simplement de borner en utilisant la
méthode whereDate()
. Voici ce que ça donne :
C’est sympa mais comme on ne veut pas réécrire ça à chaque fois (#dry), on va déplacer ça dans… un scope ! Bien tu suis !
Et pour l’utiliser, rien de plus simple :
C’est sympa les scopes hein ?!