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