2015-12-29 1 views
-1

J'ai une requête qui nécessite des informations supplémentaires sur la base du résultat de la première requête. Voici le codesimplifier la requête pour des données supplémentaires en utilisant Laravel 5.2

$params = DB::select('SELECT vpl_ppid, vpl_name, vpl_display, vpl_filter 
         FROM vw_parameter_list 
         WHERE vpl_slug = :type', ['type' => $type]); 
foreach ($params as $param) { 
    $pd_vals = DB::select('SELECT * FROM parameter_distinct_value WHERE pd_ppid = :vpl_ppid ORDER BY pd_value', ['vpl_ppid' => $param->vpl_ppid]);   
    $param->value_list = $pd_vals; 
} 

comme vous pouvez le voir ci-dessus, je crée simplement un nouveau tableau ($param->value_list) pour charger plus de données en elle. comment simplifier la requête en éliminant la requête à l'intérieur du foreach afin d'atteindre la vitesse et la même sortie que ci-dessus. Merci

+0

Si vous avez des modèles, vous pourriez relation utilisateur pour que https://laravel.com/docs/5.2/ eloquent-relations –

+0

Je n'utilise pas les modèles car il a été adapté de l'ancien db – Muhaimin

Répondre

0

Vous pouvez utiliser une sous-requête:

$results = DB::select(' 
    SELECT * 
    FROM 
     parameter_distinct_value 
    WHERE pd_ppid IN(
     SELECT vpl_ppid FROM vw_parameter_list WHERE vpl_slug = :type 
    ) 
    ORDER BY pd_value 
', ['type' => $type]); 

Ou une jointure

$results = DB::select(' 
    SELECT pdv.* 
    FROM 
     parameter_distinct_value pdv 
     INNER JOIN vw_parameter_list vpl ON vpl.vpl_ppid = pdv.pd_ppid 
    WHERE vpl.vpl_slug = :type 
    ORDER BY pdv.pd_value 
', ['type' => $type]); 
+0

en fait j'ai quelques champs nécessaires lorsque la table de requête 'vw_parameter_list' et comme vous pouvez le voir dans la collection de laravel (' $ params'), j'ai simplement créer une clé supplémentaire pour charger plus de données dans celui-ci. J'ai révisé ma question ci-dessus – Muhaimin