在我当前的应用程序中,我有一个播放列表,它几乎普遍按查询中的播放名称排序。目前,它仅使用DB::select()
语句构建,但在我们进行大量重构时,我们希望开始使用Kohana的ORM库。问题来自于我们通常不按实际游戏名称排序,而是按处理版本排序,剥离文章等并按此排序(以便“摩门教之书”与Bs一起出现,而不是TS)。我不知道如何将其转移到ORM模型定义中。
选择代码看起来像这样(删节):
DB::select(column, column,
DB::expr("CASE WHEN SUBSTRING_INDEX(show_name, ' ', 1) IN ('a', 'an', 'the')
THEN SUBSTRING(show_name, INSTR(show_name, ' ') + 1)
ELSE show_name
END AS show_name_sort")
有没有办法创建一个假的show_name_sort列,Kohana会在保存时忽略,但我仍然可以在order_by
调用中使用?或者我只需要创建一个包含名称的排序版本的实际列?
答案 0 :(得分:0)
有可能。您需要设置$_table_columns
数组以反映所有列,但“假”列。假设该表有3列:
在您的模型中,您应该覆盖$_table_columns
,因此ORM不会依赖SHOW FULL COLUMNS查询:
class Model_Yourmodel extends ORM
{
protected $_table_columns = array(
'id' => '',
'name' => '',
);
示例查询可以如下所示:
ORM::factory('yourmodel')->order_by('description')->find_all()
这样,save方法也会忽略description
列,因为它没有在$_table_columns
数组中列出。