2017-07-24 1 views
0

quelques jours en PHP ici et j'en ai un qui m'a vraiment perplexe. J'utilise Propel2 pour récupérer des lignes d'une base de données en fonction des filtres que l'utilisateur sélectionne. En fin de compte, j'espère avoir beaucoup de filtres que l'utilisateur peut sélectionner, puis générer un appel Propel2 personnalisé pour récupérer les enregistrements. Je ne peux pas utiliser If/Then en raison du nombre exponentiel de requêtes possibles. Cependant, chaque approche de mon exemple ci-dessous a échoué pour moi.Propel2 Construire Requête avec des fonctions, puis appelez

$dealfinder = DealsQuery::create()->filterByStillvalid(1)->orderByInception('DESC'); 

if(isset($dept)) { 
    $dealfinder->filterByCategory($dept); 
} 

if (isset($early)) { 
    $oneHourAgo = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s'))- $dealDelay); 
    $dealfinder->filterByInception(array('max' => $oneHourAgo)); 
} 

$dealfinder->paginate($page = $pageNum, $maxPerPage = $maxColumn*$maxRow); 

Le code ci-dessus retours:

deals.stillvalid=:p1, deals.inception<=:p1 

Cela peut juste être une chose de syntaxe enchaînant fonction PHP, alors voici ce que un appel Propel2 travail ressemblerait à ceci:

$dealfinder = DealsQuery::create()->filterByStillvalid(1)->filterByCategory($dept) 
->orderByInception('DESC')->filterByInception(array('max' => $oneHourAgo)) 
->paginate($page = $pageNum, $maxPerPage = $maxColumn*$maxRow); 

I serait très reconnaissant de l'aide avec cela. Je vous remercie.

+0

Pour ce que cela vaut, j'ai pris un certain nombre d'approches à cela avec mes connaissances limitées. C'est une approche que j'ai modélisée sur celui-ci, qui a fonctionné pour lui: https://stackoverflow.com/questions/36401454/dynamic-table-name-in-propel-query/36524417 – ZoomStop

Répondre

0

J'ai rencontré un problème similaire et j'ai fini par déplacer la requête initiale dans l'instruction if. Ce n'est probablement pas la meilleure solution jusqu'à ce que quelque chose de plus propre, mais ça a fait l'affaire pour moi.

if(isset($dept)) { 
    $dealfinder = DealsQuery::create() 
     ->filterByCategory($dept) 
     ->filterByStillvalid(1) 
     ->orderByInception('DESC'); 
} 

if (isset($early)) { 
    $oneHourAgo = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s'))-$dealDelay); 

    $dealfinder = DealsQuery::create() 
     ->filterByInception(array('max' => $oneHourAgo)) 
     ->filterByStillvalid(1) 
     ->orderByInception('DESC'); 
} 

$dealfinder->paginate($page = $pageNum, $maxPerPage = $maxColumn*$maxRow); 
+0

Merci pour la réponse! Cela fonctionne bien. J'ai fini par utiliser une approche légèrement différente en ce sens que je n'avais pas réalisé que je pouvais passer des variables (et des tableaux) en tant que paramètres. Donc, par exemple cela fonctionne: -> orderByInception ($ inceptionFilter); ' – ZoomStop