6

タイトルがまったく含まれていないモデルがあります。興味深い情報はすべて、関連するモデルにあります。

次のようにフィールドを組み合わせることができる仮想フィールドについては、すでに読みました。

public $virtualFields = array("full_name"=>"CONCAT(event_id, ' ' ,begin)");
public $displayField = 'full_name';

しかし、これで単純な ID と日付が得られます。そのIDを他のモデルの名前にする必要があります。

4

1 に答える 1

6

これは本当に の仕事のようですねSet::combine()。常に結合されるとは限らないため、表示フィールドは別のモデルを参照しないでください。そのため、どこかの呼び出しでデータが取り込まれなかった場合、エラーがスローされます。

代わりに、Set::combine()あなたを使用して、必要なものでキーと値の配列を作成できます。これはあまり「魔法的」ではありませんが、エラーの可能性は低くなります。

UsersController の例として、hasOne プロファイルがあり、プロファイルからユーザーの氏名を表示する自動入力ドロップダウン (つまり、FormHelper を使用) を使用してユーザーを選択するようにしたいとします。Containableを使用してプロファイル データを取り込みます。

class AppModel extends Model {
  $actsAs = array(
    'Containable'
  );
}

次に、UsersController で:

function choose($id = null) {
  // regular view code here
  $users = $this->User->find('all', array(
    'contain' => array(
      'Profile'
    )
  ));
  // create a key-value that the FormHelper recognizes
  $users = Set::combine($users , '{n}.User.id', '{n}.Profile.full_name');
}

full_nameそのモデルのフィールドを使用するため、Profile モデル上にあることがわかります。結合メソッドは次のような配列を作成します

array(
  1 => 'skerit',
  2 => 'jeremy harris'
);

FormHelper を使用してドロップダウン リストを作成するときに自動的に使用されるもの

echo $this->Form->input('user_id');
于 2012-06-18T14:55:03.117 に答える