Easy Développement
Agence de développement Laravel - Lille et Paris
  • L'agence
  • Nos services
    • ERP
    • Sites ecommerce
    • Développement sur mesure
    • Applications mobiles
  • Laravel
  • Références
  • Blog
  • Contact
  • 09 73 05 07 53

Astuce Laravel #2 : Etendre le query builer de laravel : 2 query builder, 2 astuces

Classé dans : Techno Mis à jour le : 21/06/2019


En développant avec Laravel, vous serez forcément amenés à réaliser des requêtes vers votre base de données, et donc d'utiliser le query builder. Et vous allez probablement vous confronter au problème suivant : bien que les méthodes proposées par Laravel permettent de faire beaucoup de choses, il serait bien de pouvoir en ajouter. Par exemple, dans notre code, je me trouvais souvent confronté à une situation : certaines colonnes dans ma base de données peuvent avoir la valeur null ou 0, et elles doivent être traitées de la même manière. J'étais donc obligé sur chaque requête de faire une condition double where(colonne, 0)->orWhereNull(colonne), le tout encapsulé dans une function anonyme pour gérer les priorités du or / and en sql, assez lourd. J'ai donc cherché la mnière de créer ma propre méthode zero_ou_null($colonne), pour gagner du temps et de la lisibilité. 

Une première chose qui peut parraitre troublante pour un non initié : Laravel dispose de 2 query builder, très similaires. L'un d'eux est utilisé avec Eloquent, l'autre est utilisé lorsque vous réalisez des requêtes avec DB::query()

Il existe deux manières différentes d'étendre ces query builder, que nous allons détailler ici.

1) Etendre le query builder Eloquent

C'est la méthode que nous utilisons le plus chez Easy Développement.

Note : pour utiliser cette technique, il est nécessaire que tous vos modèles héritent de la même classe (qui elle même hérite du model standard Laravel). Ce n'est pas une obligation en soit, mais si vous n'utilisez pas cette technique, il faudra dupliquer le code sur chacun de vos modèles, ce qui me semble à proscrire.

Pour étendre le query builder d'Eloquent, rien de plus simple :

Dans votre classe modèle "mère", il suffit d'ajouter le code suivant :

public function newEloquentBuilder($query) {
        
        return new Eden_query_builder($query);
}

Eden_query_builder est ici notre query builder sur mesure, que j'ai positionnée dans mon répertoire Models. Bien entendu, vous le mettez où cela vous semble pertinent. Il faut également bien entendu faire un "use" de cette classe dans votre fichier de modèle de base.

Ce code permettra, pour chaque requête d'instancier un query builder personnalisé, au lieu d'utiliser le query builder standard de Laravel.

Et dans cette classe, le code suivant est suffisant :

<?php
namespace App\Eden\Models\Query_builder;
use Illuminate\Database\Eloquent\Builder;
class Eden_query_builder extends Builder {
    
    /**
     * 
     * Ajoute une méthode pour chercher un champ qui peut être 0 ou null
     * 
     */
    public function zero_ou_null($champ) {
        
        $this->where(function($requete) use ($champ) {
            
            $requete->where($champ, 0);
            $requete->orWhereNull($champ);
        });
        
        return $this;
    }
}

Vous remarquez que nous héritons du query builder standard, ce qui nous permet bien entendu de profiter de toutes les méthodes standard proposées par Laravel / Eloquent.

Et cette méthode peut ensuite s'utiliser comme une méthode standard :

User::where('valide', 1)->zero_ou_null('inactif')->get()

 

2) Etendre le query builder standard

Nous utilisons très peu (voir jamais) le query builder standard de Laravel (celui qui ne se base pas par Eloquent)

Pour cela, j'ai suivi un tuto : étendre le query builder de laravel

Le tuto répond exactement au besoin, je ne vais donc pas paraphrasé, et il faut rendre à César ce qui est à César.

A noter qu'en le suivant, il manque quelques informations dans ce tuto, notamment, de mémoire il faut inclure des use pour les classes QueryGrammar et SchemaGrammar, qui sont des alias. Je n'ai malheureusement pas gardé le code utilisé pour tester la méthode, mais au besoin, utilisez les commentaires pour les questions j'y répondrai avec plaisir ;)


Laissez nous votre avis

Catégories

  • Combien ça coûte ? (2)
  • Expériences clients (1)
  • La vie d'Easy-Développement (1)
  • Culture buisness (2)
  • E-commerce (7)
  • Techno (4)

Tags

Laravel
Easy Développement

Easy Développement

  • Mentions légales
  • Contact
09 73 05 07 53

Contact mail
3 rue des Teinturiers
59491 Villeneuve D'Ascq
France
Agence Laravel à 1 heure de Paris
Les derniers articles du blog Vers quel langage faut il s'orienter en tant que dév ? Non ! L'open source n'est pas gratuit ! Quel est le budget pour un ERP ? Arrêtez les lettres de motivation, et soyez motivé(e)s pour de vrai ! Parti pris #1 : nous codons en français !