2015-06-22 65 views
0

我希望進行排序,我動態創建在formatResults()CackePHP 3 formatResults()令動態創建

$users = $this->Users 
->find('all') 
->formatResults(function ($users) use ($lat, $lng) { 
    return $users->map(function ($user) use ($lat, $lng) { 
     $user->distance = getDist($lat, $lng); 
     return $user; 
    }); 
}) 
->order([ 
    'distance' => 'ASC' 
]); 

[...] 

$this->set('users', $this->paginate($users)); 

字段$user->distance不在數據庫中的一個字段。 $user->distance包含一個浮點數(getDist($lat, $lng);),該浮點數根據用戶在他的請求時的位置而變化。

->order([ 
    'distance' => 'ASC' 
]); 

返回一個錯誤:Column not found: 1054 Unknown column 'Users.distance' in 'order clause'

我的問題是這樣的:我可以排序從用戶接收信息時,我已動態創建一個領域?

回答

1

您可以按php中的字段進行排序,但它不適用於分頁,因爲進行排序需要數據庫中的所有記錄。您需要創建一個運行在SQL中的等效邏輯,以便您可以排序。

檢查這個插件,可以幫助你計算距離和排序他們https://github.com/dereuromark/cakephp-geo/

的是find('distance')自定義查找,使用所提供的行爲時,可以動態地添加到您的表。 https://github.com/dereuromark/cakephp-geo/blob/master/src/Model/Behavior/GeocoderBehavior.php#L223

+0

謝謝你,我的函數'getDist()'是可操作的,所以我不需要插件,所以我會研究一個用MySQL替代 – eclaude