2017-07-24 102 views
0

在这里几天进入PHP,我有一个让我真的难倒了。我正在使用Propel2根据用户选择的过滤器从数据库中检索行。最终,我希望能够有很多用户可以选择的过滤器,然后生成一个自定义Propel2调用来检索记录。由于指数数量的可能查询,我无法使用If/Then。然而,下面我的例子的每个方法都失败了。Propel2使用函数构建查询,然后调用查找

$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); 

以上的回报代码:

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

这可能只是一个PHP函数链语法的东西,所以这里是一个工作Propel2调用会是什么样子:

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

我将非常感谢帮助。谢谢。

+0

对于什么是值得的,我用我有限的知识采取了许多方法。这是我在这里模拟的一个方法,他说他为他工作:https://stackoverflow.com/questions/36401454/dynamic-table-name-in-propel-query/36524417 – ZoomStop

回答

0

我有过类似的问题,并最终移动if语句内的初始查询。这可能不是最好的解决方案,直到清理干净,但它为我完成了诀窍。

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

谢谢你的答复!这确实很好。我结束了使用稍微不同的方法,我没有意识到我可以传递变量(和数组)作为参数。因此,例如这个工程: - > orderByInception($ inceptionFilter);' – ZoomStop