cakephp
2012-06-18 16 views 6 likes 
6

タイトルはまったく含まれていません。すべての興味深い情報は、関連するモデルにあります。CakePHPのディスプレイフィールドとして、関連モデルのフィールドを使用してください

私はすでにあなたがこのようなフィールドを組み合わせることができたとvirtualfields、読ん:

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

しかし、それは、単純なIDと日付を私に与えます。私は他のモデルの名前であるためにそのidが必要です。

答えて

6

これは実際に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'); 
+1

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

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

のような配列を作成し兼ね備えおかげで、これは)私が(コンバイン理解して助けました。あなたの事例の中にcontainableを追加する必要があることを忘れないでください。 – 472084

+0

それは誰かを助けてうれしいよ、嬉しい。答えをより完全にするために、この例に含めることを追加しました。 – jeremyharris

関連する問題