2013-04-17 5 views
0

J'ai une requête dans Laravel:Laravel optimisation des requêtes


... 
$query = $model::group_by($model->table().'.'.$model::$key); 
$selects = array(DB::raw($model->table().'.'.$model::$key)); 
... 
$rows = $query->distinct()->get($selects); 

cela fonctionne bien et me donne les clés des champs que j'ai besoin, mais le problème est que je dois obtenir toutes les colonnes et non pas seulement la clé .

utilisant ceci:

$selects = array(DB::raw($model->table().'.'.$model::$key), DB::raw($model->table().'.*')); 

est pas une option, cuz il ne fonctionne pas avec PostgreSQL, donc j'utilisé $rows pour obtenir le reste des colonnes:

for ($i = 0; $i<count($rows); $i++) 
{ 
    $rows[$i] = $model::find($rows[$i]->key); 
} 

mais comme vous voyez c'est c'est tellement inefficace, alors que puis-je faire pour le rendre plus rapide et plus efficace?

vous pouvez trouver tout le code ici: https://gist.github.com/neo13/5390091

ps. Je devrais utiliser rejoindre mais je ne sais pas comment?

Répondre

0

Ne passez rien dans get() et il retournera toutes les colonnes. Aussi la clé est probablement unique dans le tableau, donc je ne comprends pas exactement pourquoi vous devez faire le groupe par.

$models = $model::group_by($model->table() . '.'. $model::$key)->get(); 
+0

ne fonctionne pas avec PostgreSQL – user2277033