2016-02-05 50 views
1

我對結果的MySQL查詢我需要:由計算機MySQL的領域CakePHP的2.x的分頁排序

SELECT `delivery_date` FROM `order_grids` ORDER BY str_to_date(`delivery_date`, "%b %d, %Y") DESC 

正如我們自定義的ORDER BY所以我現在所面臨的問題,以實現它在CakePHP中2 。X。

一般情況下,如果正常字段排序,我們做如下。我有一個VARCHAR類型字段delivery_date,其中存儲日期的格式爲Jan 21, 2015,並需要對該列進行排序。

我已經有了MySQL查詢如上圖所示:

$this->Paginator->sort('delivery_date','Delivery Date'); 

請協助。

+0

您可以使用虛擬字段。但是,將日期存儲在VARCHAR中並不是一個好主意。 –

+0

@InigoFlores - 實際上這是一個正在進行的項目,所以我們不能改變字段類型。你可以請解釋我如何使用我的SQL查詢,所以它在蛋糕PHP的方式工作。 –

+0

我明白了。看看我的回答是否有幫助。 –

回答

1

您可以通過創建一個虛擬字段來完成此操作。

由於虛擬域在執行查找時的行爲與常規域非常相似,因此Controller::paginate()也可以通過虛擬域進行排序。

以下內容添加到您的OrderGrid型號:

public function __construct($id = false, $table = null, $ds = null) { 
    parent::__construct($id, $table, $ds); 
    $this->virtualFields['delivery_date_proper'] = sprintf('STR_TO_DATE(%s.delivery_date, "%%b %%d, %%Y") ', $this->alias); 
} 

這將允許您通過delivery_date_proper分頁時排序。