Пакет FuelPHP ORM неправильно заказывает товары

У меня есть таблица с полем заголовка, я пытаюсь получить все строки в этой таблице и упорядочить их по заголовку ASC. Четыре записи, с которыми я тестирую, имеют названия:

Еще один тест

Моя новая страница

NEW

ааа

Это также порядок, в котором строки возвращаются, что неверно. «ааа» должен быть в верхней части списка. Я предполагаю, что проблема с символами нижнего и верхнего регистра.

Я хочу заказать по НИЖЕ (название), а не просто по названию, однако у меня есть проблемы с выполнением этой работы в FuelPHP.

Код, который я использую для выбора записей:

$pages = Model_pages::find('all', array(
'order_by' => array('title' => 'asc')
));

Как сделать код выше элементов заказа независимо от их «кейса»?

РЕДАКТИРОВАТЬ:

@Uru, спасибо за отзыв 🙂 Я пробовал следующий код, все варианты приводят к ошибкам SQL или PHP:

$pages = Model_pages::find('all', array(
'order_by' => \DB::expr('LOWER(title) ASC')
));

$pages = Model_pages::find('all', array(
'order_by' => \DB::expr('LOWER(title)')
));

$pages = Model_pages::find('all', array(
'order_by' => \DB::expr('LOWER(title) ASC')
));

$pages = Model_pages::find('all', array(
'order_by' => array( \DB::expr('LOWER(title)') )
));

$pages = Model_pages::find('all', array(
'order_by' => array( \DB::expr('LOWER(title) ASC') )
));

$pages = Model_pages::find('all', array(
'order_by' => array( \DB::expr('LOWER(title)') => 'ASC' )
));

0

Решение

Вы должны быть в состоянии использовать DB::expr('LOWER(title)') избегать выражений и использовать их вместо 'title',

Если это не работает и в документация тогда эта функция в настоящее время не поддерживается.

0

Другие решения

Проблема была с сопоставлением базы данных в MySQL, и изменение ее на utf8_general_ci решило проблему. Спасибо Харро на форумах FuelPHP за ответ на этот вопрос:

Вы используете MySQL? И если да, то какую последовательность сортировки вы используете для
твой стол?

MySQL как последовательность сортировки с «ci» в конце (например,
utf8_general_ci), которые «нечувствительны к регистру». Что означает «ааа» и
«ААА» отсортированы одинаково.

Если вы хотите точно знать, какой SQL выполняется, установите для параметра «Профилирование» значение
true в вашем config.php, и установите его в true в вашей базе данных
определение, в /db.php.

Вы получите маленький черный профилировщик в правом нижнем углу вашего
страницы, и если вы нажмете на нее, откроется профилировщик, и он покажет
Вы все SQL-запросы выполнили.

Насколько я понимаю, в вашем ORM-коде нет ничего плохого, но я
никогда не используйте запись массива. Я бы использовал (который должен генерировать
тот же SQL):

$ pages = Model_pages :: query () -> order_by (‘title’, ‘asc’) -> get ();

Полный поток можно найти здесь для тех, кто сталкивается с той же проблемой:

http://fuelphp.com/forums/discussion/13226/fuelphp039s-orm-isn039t-ordering-items-correctly

0

По вопросам рекламы [email protected]