Можете ли да използвате modulo с Propel Criteria?

Искам да пропусна 'N' реда, когато изтеглям данни. С помощта на необработен SQL мога да постигна това с помощта наWHERE 'id' %%%u=0, където 'u' е моят интервал. Мога ли да постигна това с помощта на обекта Criteria? Опитах това: $c->getNewCriterion(GaugeDataPeer::ID%$interval, 0, Criteria::EQUAL);, но без резултат.

Това е на Symfony 1.4. Не съм сигурен коя версия на Propel.

Ето пълната заявка, която се опитвам да пресъздам:

$query  = sprintf("SELECT *
                          FROM `processed_gauge_data`
                          WHERE `id` %%%u=0 AND `processed_gauge_data`.`gauge_id` IN (%s) AND `processed_gauge_data`.`stamp` >= '%s' AND `processed_gauge_data`.`stamp` <= '%s';",
                  $interval,
                  implode(',', $gauge),
                  mysql_real_escape_string(date('Y-m-d H:i:s', $start)),
                  mysql_real_escape_string(date('Y-m-d H:i:s', $end))
              );

person IT_Guy    schedule 23.10.2014    source източник


Отговори (2)


Просто използвайте ->where

->where('ProcessedGaugeData.Id %%%u = 0')

и по-добре използвайте ActiveQuery: http://propelorm.org/blog/2010/08/03/refactoring-to-propel-1-5-from-peer-classes-to-query-classes.html

person Marc J. Schmidt    schedule 12.11.2014

Намерих решение!

МОЯТ СТАР КОД:

$c = new Criteria();
            $c->add(GaugeDataPeer::GAUGE_ID, $this->getId(), Criteria::EQUAL);

            $start_c = $c->getNewCriterion(GaugeDataPeer::STAMP, $dates['start']->format('Y-m-d H:i:s'), Criteria::GREATER_EQUAL);
            $end_c = $c->getNewCriterion(GaugeDataPeer::STAMP, $dates['end']->format('Y-m-d H:i:s'), Criteria::LESS_EQUAL);
            $start_c->addAnd($end_c);
            $c->add($start_c);

            $c->addAscendingOrderByColumn(GaugeDataPeer::STAMP);
            $data_array = GaugeDataPeer::doSelect($c);

МОЯТ НОВ КОД

$query  = sprintf("SELECT *
                          FROM `gauge_data`
                          WHERE `id` %%%u=0 AND `gauge_data`.`gauge_id` IN (%s) AND `gauge_data`.`stamp` >= '".$dates['start']->format('Y-m-d H:i:s')."' AND `gauge_data`.`stamp` <= '".$dates['end']->format('Y-m-d H:i:s')."';",
                  $interval,
                  implode(',', array($this->getId()))
              );                

            $conn = Propel::getConnection();
            $st = $conn->prepare($query);
            $st->execute();
            $data_array = $st->fetchAll(PDO::FETCH_CLASS, GaugeData);
person IT_Guy    schedule 24.10.2014