Приведите Varchar как целое число в propel для addAscendingOrderByColumn - PullRequest
1 голос
/ 04 ноября 2011

У меня есть метод для извлечения данных из базы данных для проекта 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);
}

Ответы [ 2 ]

4 голосов
/ 04 ноября 2011

А как же:

$c->addAscendingOrderByColumn('CAST('.$column.' AS UNSIGNED)');
3 голосов
/ 11 ноября 2011

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

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

...