2013-09-26 60 views
0

在這個例子中,我正在處理兩個模型:部門和用戶。從CakePHP的FormHelper中定義關聯模型選擇框的排序順序?

部門屬於關聯用戶 (在這種情況下,用戶是一個部門經理[空允許]。)

使用表單助手,我簡單地定義的用戶ID的選擇爲:

echo $this->Form->input('user_id', array('label'=>'Department/Group Manager (leave blank if none)', 'empty' => true)); 

默認情況下,FormHelper似乎通過User.id ASC(HTML select元素的「value」屬性)來排序選擇項。爲了使事情在add.ctp形式更好,我創建了一個虛擬的領域爲「姓氏,名字」被用作用戶模式的顯示領域:

public $virtualFields = array(
    'name' => "CONCAT(User.lastName, ', ', User.firstName)" 
); 
public $displayField = 'name'; 

這偉大的工作。不幸的是,我希望能夠通過虛擬字段的值(在這種情況下爲User.lastName)而不是User.id來對呈現的選擇框中的項目進行排序。我無法找到一種使用FormHelper的方法。是否有另一種方法來做到這一點(如果FormHelper不能這樣做)?

回答

1

MVC: MODEL檢索數據(業務邏輯)。

CONTROLLER設置視圖[$ this-> set()]的數據。

VIEW只是簡單地處理您的輸出以及任何不能在別處處理的邏輯。

根據創建cake bake輸出的方式使用Cake約定,您希望在調用與您的控制器中與特定視圖相關的模型的find()方法中設置ORDER BY子句。在這種情況下,您的部門的add()方法。

public function add(){ 
    // ... other code ... 

    $users = $this->Department->User->find('list', array('order' => array('lastName' => 'asc')); 
    $this->set(compact('users')); 
} 

請注意,如果您正在使用中可容納的行爲,你可能需要調整其設置以實現預設(最有可能的工作)上面的代碼示例。