Eager loading amélioré ?

Par Rocrafwer, il y a 10 ans


Bonjour tout le monde,

bon voilà je fais mon premier gros projet sous laravel, et je rencontre un petit soucis au niveau du nombre de requêtes. J'en réalise en moyenne 13 par page, mais ya moyen de réduire jusqu'à 6-7 max.

Pour expliquer vite fait ce qui pose problème, j'ai mes articles dans une table posts, et des images dans une table images. Des images peuvent être liées avec des articles (il y a un champ post_id). Quand je récupère mes articles, je prends avec les images liées. J'utilise le système d'eager loading, je fais mes requêtes Post::with('images')....
Pour l'instant, pas de problèmes. Le truc c'est que j'ai besoin d'effectuers plusieurs requêtes sur ma page (on va dire 3) article avec des critères différents, et j'ai à chaque fois besoin de ces images.
Je me retrouve avec 3 requêtes presques identiques sur la table images.
Je peux difficilement combiner mes requêtes en une ayant des critères différents pour chacune d'elles.
Bref, il faudrait que toutes les requêtes de ces images soient faitent en derniers et que les valeurs de retour s'associent comme il le faut.

Existe-t-il une option intégrée ? Ou une librairie (c'est comme ça que ça s'appelle ? D:) ?

Merci d'avance !

Rocrafwer

7 réponses

Alexandre #lbac, il y a 10 ans

Et le cache ?

Rocrafwer, il y a 10 ans

Comment ça ?

mxmaxime, il y a 10 ans

Pourquoi ne pas utiliser un cache? ^^ Comme le dit @SquallX

Rocrafwer, il y a 10 ans

Argh ! Je suis désolé je ne vois pas comment faire :'(

Pour réexpliquer vite fait mon problème, voici une pitite image : http://www.noelshack.com/2016-01-1452449711-2.png.
Ce que j'aimerai faire c'est combiner toutes les requettes sur la table images.

Merci en tous cas :p

Grafikart, il y a 10 ans

Pas d'options intégré. Le mieux est de récupérer les posts d'un côté, extraire les IDs, et les utiliser pour faire la requêtes de toutes les images. Ensuite grouper les images par post_id pour les utiliser plus simplement.

Rocrafwer, il y a 10 ans

Okay donc pas d'options. Dommage.
Merci d'avoir répondu !