これは実際にSet::combine()
の仕事のようです。表示フィールドは別のモデルを参照するべきではありません。なぜなら、必ずしも加入することが保証されているとは限らないからです。したがって、どこかの呼び出しでデータが取り込まれなかった場合、エラーが発生します。
代わりにSet::combine()
を使用すると、任意の値を持つキー値配列を作成できます。これはあまり「魔法」ではありませんが、エラーの可能性は低くなります。
ユーザーコントロールの例では、hasOneプロファイルがあり、ユーザーがプロファイルからユーザーのフルネームを示す自動入力ドロップダウン(FormHelperを使用)を使用してユーザーを選択するとします。 Containableを使用してプロフィールデータをインポートします。 UserControllerにある状態次に
class AppModel extends Model {
$actsAs = array(
'Containable'
);
}
:
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モデルになっていることに気づくでしょう。この方法は、あなたが
echo $this->Form->input('user_id');
ドロップダウンリストを作成するFormHelperのを使用するときに自動的に使用されます
のような配列を作成し兼ね備えおかげで、これは)私が(コンバイン理解して助けました。あなたの事例の中にcontainableを追加する必要があることを忘れないでください。 – 472084
それは誰かを助けてうれしいよ、嬉しい。答えをより完全にするために、この例に含めることを追加しました。 – jeremyharris