从CakePHP的FormHelper中定义关联模型选择框的排序顺序?

时间:2013-09-26 17:53:50

标签: select cakephp-2.0 formhelper

在这个例子中,我正在使用两个模型:Departments和Users。

部门属于用户 (在这种情况下,用户是部门经理[允许空值]。)

使用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 个答案:

答案 0 :(得分: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'));
}

请注意,如果您使用可包含行为,则可能需要调整其设置以实现上述默认(最可能正常工作)的代码示例。