Приведение Varchar как целого числа в propel для addAscendingOrderByColumn

#symfony1 #integer #sql-order-by #propel #varchar

#symfony1 #целое #sql-порядок по #продвигать #varchar

Вопрос:

У меня есть метод для получения данных из базы данных для проекта symfony-1.1 на основе propel.

Теперь появился вариант использования для сохранения целого числа в varchar поле, что приводит к неправильному порядку, например {1, 17, 5} , а не к числовому, который я ожидал, т. Е. {1, 5, 17} .

Я знаю, что одним из способов было бы изменить дизайн моего schema.yml , но это не вариант. Мне было интересно, есть ли способ преобразовать указанное varchar поле в целое число без ущерба для propel-подхода.

Это функция сортировки:

 public static function getFooData($column = 'FooPeer::ID', $orderBy = 'asc') {
    //FIXME: Sort varchar fields as integer, needed for FooPeer::REQUESTS

    $c = new Criteria();

    if ($orderBy == 'asc') {
        $c->addAscendingOrderByColumn($column);
    } else {
        $c->addDescendingOrderByColumn($column);
    }

    return FooPeer::doSelect($c);
}
  

Ответ №1:

Как насчет:

 $c->addAscendingOrderByColumn('CAST('.$column.' AS UNSIGNED)');
  

Комментарии:

1. Большое вам спасибо. Это работает. Я бы поддержал вас, если бы только мог 😉

Ответ №2:

Просто для интереса вы могли бы также написать представление для этого и построить свою модель поверх представления, а не таблицы. Предполагая, что вы записываете в таблицу с помощью Propel, это решение требует, чтобы платформа поддерживала доступные для записи представления (я не уверен, что все они поддерживают, но, возможно, это предположение устарело).

Часто это хороший / быстрый метод, когда вы не уверены, как что-то сделать в Propel, или когда это действительно неудобно. Это спасло меня несколько раз, хотя это не каждому пуристу по вкусу.