Laravel 6

Réduction du nombre de requetes

Avatar de InsaneBobby
InsaneBobby

Hello à tous,

Dans le cadre d'un projet laravel, je suis confronté à un problème de performance lié à un trop grand nombre de requetes.

J'ai besoin d'une vue qui liste qui recupere des infos de plusieur table avec des relations. Actuellement dans mon controller j'ai :


$medias = Media::with(['mediagroup'])
            ->withCount('operations')
            ->withCount('contacts')
            ->orderBy('name')
            ->get();

Laravel DebugBar indique 293 requêtes ...

Existe t'il un moyen pour réduire le nombre de requêtes, soit en modifiant ma requête ? Est ce qu'il préconiser de passer par un repository ou cela n'a pas d'interêt.

Merci pou votre aide

Avatar de bestmomo
bestmomo

Salut,

Tu as essayé comme ça ?

$medias = Media::with(['mediagroup'])
            ->withCount(['operations', 'contacts'])
            ->orderBy('name')
            ->get();
Avatar de InsaneBobby
InsaneBobby

Hello,

Oui c'est pareil. Il y a un bouton uniquement visible si le média a des contacts avec un @if($media->contacts->count()). Le problème semble être là

  @if($media->contacts->count())
                                <li class="list-inline-item ">
                                {{Form::open(['method'  => 'DELETE', 'route' => ['medias.destroy', $media], 'id'=>'delete_media_'.$media->id])}}
                                    <a href="javascript:void();" onclick="event.preventDefault(); document.getElementById('delete_media_{{$media->id}}').submit()"
                                    data-toggle="tooltip" data-placement="top" title="" data-original-title="Supprimer">
                                        <i class="bx bx-trash text-danger font-size-20"></i>
                                    </a>
                                </li>
                                {{ Form::close() }}
                                @endif
Avatar de bestmomo
bestmomo

Ah oui là on comprend mieux... Il faut aussi charger les contacts :

$medias = Media::with(['mediagroup', 'contacts'])
            ->withCount(['operations', 'contacts'])
            ->orderBy('name')
            ->get();

Mais ça semble redondant avec le comptage de withCount. Tu dois pouvoir écrire :

@if($media->contacts_count)
Avatar de InsaneBobby
InsaneBobby

Ah oui, c'est nettemenet mieux; On passe à 150 requêtes.

Merci une fois de plus pour ton aide

Vous ne pouvez pas répondre à ce sujet.