Как отсортировать строковое поле как целочисленное?

Запрос на выборку товаров, отсортированный по мощности.
$products = Product()::find()->orderBy(['power' => SORT_ASC])->active()->all();

Загвоздка в том, что в БД значение мощности хранится как строка и сортируется она таким образом
1000, 600, 750, 800, 900, 950
Вопрос в том, как перед сортировкой дать перевести строки в числа и отсортировать по мощности правильно
600, 750, 800, 900, 950, 1000?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
gogolinsky
@gogolinsky Автор вопроса
Использовал функцию mysql CAST
$sort = new Sort([
                        'attributes' => [
                            'power' => [
                                'asc' => [new Expression('CAST(' . AttributeValue::tableName() . '.value as SIGNED) ASC')],
                                'desc' => [new Expression('CAST(' . AttributeValue::tableName() . '.value as SIGNED) DESC')],
                                'default' => SORT_DESC,
                                'label' => 'Мощность',
                            ],
                        ],
                    ]);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы