Propel2 Build Query с функциями и затем вызовите Find

Несколько дней в PHP здесь, и у меня есть один, который действительно поставил меня в тупик. Я использую Propel2 для извлечения строк из базы данных на основе фильтров, выбранных пользователем. В конечном итоге я надеюсь, что у меня будет множество фильтров, которые пользователь сможет выбрать, а затем сгенерировать пользовательский вызов 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);

Код выше возвращает:

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

Буду очень признателен за помощь в этом. Спасибо.

1 ответ

Решение

У меня была похожая проблема, и я переместил исходный запрос в оператор 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);
Другие вопросы по тегам