これは本当に の仕事のようですね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');