Bonjour à tous.

Sur un site que je code, j'ai besoin de récupérer le nombre total de véhicule que possède un client, ces véhicules sont dispatchés en 5 tables (Tracteur, recolte, remorque, telescopique, autre).

Du coup, j'aimerais récupérer le nombre total de ces véhicule pour une fiche, que je récupère dans un foreach.

Ne sachant pas vraiment m'y prendre, je procède comme ceci, dans mon modèle :

public function getNbVehicule($id){
        $nbVehi = Tracteur::where('id_fiche', $id)->count() + Vehicule_recolte::where('id_fiche', $id)->count()
            + Telescopique::where('id_fiche', $id)->count() + Vehicule_remorque::where('id_fiche', $id)->count()
            + Autre_vehicule::where('id_fiche', $id)->count();

        return $nbVehi;
    }

et je le récupère dans mon foreach :

@foreach($fiches as $fch)
                    <tr>
                        <td>{{ $fch->getNbVehicule($fch->id) }}</td>
                    </tr>
                @endforeach

Sauf que je génère beaucoup trop de requêtes, pour chaques lignes je faire 5-6 requêtes.
Est-ce qu'il y a un moyen de diminuer le nombre de ces requêtes ?

2 réponses


Amilti
Réponse acceptée

yop,
Si tu veux éviter de faire une requête selon moi le meilleur moyen serait d'utiliser une sorte de counter cache :
En gros tu viens créer un champ dans ta table clients nb_vehicule et à chaque foit que tu ajoutes un véhicule ou que tu le supprime tu viens modifier le champ .

tu peux regarder du côté des events :
https://laravel.com/docs/5.5/eloquent#events

iGenezys
Auteur

Salut, merci pour ta réponse, j'vais partir sur cette solution du coup, merci ! :)