У меня есть таблица с полем заголовка, я пытаюсь получить все строки в этой таблице и упорядочить их по заголовку 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' )
));
Вы должны быть в состоянии использовать DB::expr('LOWER(title)')
избегать выражений и использовать их вместо 'title'
,
Если это не работает и в документация тогда эта функция в настоящее время не поддерживается.
Проблема была с сопоставлением базы данных в 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