0

この例では、部門とユーザーの 2 つのモデルを使用しています。

Departments belongsTo Users (この例では、ユーザーは部門マネージャーです [null 許可]。)

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 フォームを使いやすくするために、User モデルの表示フィールドとして使用する "Lastname, Firstname" という仮想フィールドを作成しました。

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

これはうまくいきました。残念ながら、User.id ではなく、仮想フィールドの値 (この場合は User.lastName) の昇順でレンダリングされた選択ボックス内のアイテムを並べ替えられるようにしたいと考えています。FormHelper を使用してこれを行う方法がわかりませんでした。これを行う別の方法はありますか (FormHelper ができない場合)?

4

1 に答える 1

1

MVC: MODEL はデータ (ビジネス ロジック) を取得します。

CONTROLLER は、ビュー [$this->set()] のデータを設定します。

VIEW は単に出力を処理し、他の場所では処理できないロジックを処理します。

出力がどのように作成されるかに基づく Cake の規則を使用cake bakeして、特定のビューに関連するコントローラーのモデルの find() メソッドの呼び出しに ORDER BY 句を設定する必要があります。この場合、Department の add() メソッドです。

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

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

Containable Behavior を使用している場合は、設定を調整して、上記のデフォルトの (ほとんどの場合動作する) コード例を実現する必要があることに注意してください。

于 2013-09-26T22:12:09.173 に答える