Propel2 使用函数构建查询,然后调用 Find

Propel2 Build Query with functions and then call Find

进入 PHP 几天后,我遇到了一个让我非常难过的问题。我正在使用 Propel2 根据用户 selects 的过滤器从数据库中检索行。最终我希望有很多用户可以 select 的过滤器,然后生成一个自定义的 Propel2 调用来检索记录。由于可能的查询数量呈指数级增长,我无法使用 If/Then。但是,下面我的示例的每种方法对我来说都失败了。

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

上面的代码returns:

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

如果能提供帮助,我将不胜感激。谢谢你。

我遇到了类似的问题,最终将初始查询移到了 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);