#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, или когда это действительно неудобно. Это спасло меня несколько раз, хотя это не каждому пуристу по вкусу.