FuelPHP的ORM包装无法正确订购商品

时间:2014-09-16 20:18:41

标签: php fuelphp fuelphp-orm

我有一张标题为'的表格。字段,我试图获取此表中的所有行,并按标题ASC排序。我正在测试的四个记录有标题:

另一项测试

我的新页面

NEW

AAA

这也是返回行的顺序不正确。 ' AAA'应该在列表的顶部。我认为问题在于大小写字符。

我想通过LOWER(标题)订购,而不仅仅是标题,但我在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' )
));

2 个答案:

答案 0 :(得分:0)

您应该可以使用DB::expr('LOWER(title)')来转义表达式并使用它来代替'title'

如果这不起作用且documentation中没有任何内容,则目前不支持此功能。

答案 1 :(得分:0)

问题在于MySQL中的数据库排序规则,将其更改为utf8_general_ci解决了问题。感谢Harro在FuelPHP论坛上回答这个问题:

  

您使用的是MySQL吗?如果是这样,您使用什么整理顺序   你的桌子?

     

MySQL作为整理序列与“ci”结尾(如   utf8_general_ci),“不区分大小写”。这意味着“aaa”和   “AAA”的排序相同。

     

如果您想知道SQL的执行情况,请将“profiling”设置为   在config.php中为true,并在数据库中将其设置为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