2011-02-07 19 views
0

これまでのところ、私は3.5時間それを実行していたのでこれは可能ではないと思います。運がない。CakePHP:既存の選択オプションに付随する追加の選択ボックスデータ(関連モデルから)

私はフォームを持っています。

私は、選択項目の隣に関連データを表示したい選択フィールド(選択オプションはもちろん)を持っています。例えば

追加プランフォームで、私は計画の詳細と題し選択ボックスを持っています。プラン詳細(モデル)には、プラン詳細ノート(モデル)(PlanDetailNoteがPlanDetailに属しています)が関連付けられています。言い換えると、各プランの詳細には、plan_detail_notesテーブルにそのプランに関する注釈があります。

私はそうのようにそれを表示するには、CakePHPによる人間的に可能であるかどうかを知りたい:

セレクトプランの詳細:
[プラン詳細オプション1] - [プラン詳細注]
[プラン詳細オプション2] - [プラン詳細注]
[プラン詳細オプション3] - [プラン詳細注]
[プラン詳細オプション4] - [プラン詳細注]

あなたが見ることができるように、ノート通常の選択オプションに追加されますが、表示のみの静的なものであり、保存する必要はありません。

これはCakePHPでも可能ですか?

答えて

2

ちょうど別の考えあなたが実際にしたいことは

<select> 
    <option value="1">[Plan Detail Option 1] - [Plan Detail Note]</option> 
    <option value="2">[Plan Detail Option 2] - [Plan Detail Note]</option> 
    ... 
    <option value="N">[Plan Detail Option N] - [Plan Detail Note]</option> 
</select> 

されている場合は、手動で[コントローラーに](関係が正しく作成されていると仮定した場合)のgetAllクエリを使用して

をリストを作成することができ

$plans_list = array(); 
$plans = $this->Plan->findAll(); 
foreach($plans as $row) { 
    $plans_list["{$row['Plan']['id']}"] = "{$row['Plan']['name']} - {$row['PlanDetail']['note']}"; 
    } 
$this->set('plans_list', $plans_list); 

[[表示中]

<?php echo $form->select('Plan.id', $plans_list); ?> 
+0

これは私を正しいトラック。私は下のコードと出力のサンプルスクリーンショットを追加しました。 findAll()は1.3では有効ではないようですので、find( 'all')を実行しました。 $ this-> depthを変更して、より深い関連モデルPlanDetailを組み込む必要がありました。私はあなたが私のテーブルスキーマを見て私の関係を知っていることは不可能であったことを知っています。大きな答えをありがとう:) – OldWest

+0

かなり私の答えを説明するコードを書いた笑 – Stoosh

0

Cakeをしばらく使っていないのですが、プランの詳細コントローラで、プランの詳細ノートをビューに追加する前に追加できないことがありますか?

0

あなたがしたいことは、プランの詳細ノートを選択ボックスの隣のdivにテキストとして表示するようなものです。オプションを選択すると、div内のテキストが選択されたオプションのプラン詳細ノートに更新されます。

これが実現したら、それはいくつかのajaxの作業を必要とします。基本的には、選択ボックスのフィールドを 'onChange'イベントとして観察します。このイベントは、divのinnerHtmlをプランの詳細ノートで更新します。

私は、javascriptの配列またはオブジェクトとしてプランの詳細ノートを保存してから、onChangeで、divのinnerHtmlをjavascript配列の値に設定します。

+0

私はあなたのアイデアを高く評価しています:)私はAjaxヘルパーを使い、それをすべてやっていることにあまり熟考していません。私は、コントローラにフィールドのデータを追加する方法があると思います(リストを選択すると、関係を設定するオプション)。 – OldWest

0

ゼロスキル

コンセプトに基づいて、いくつかの調整を行っていました。ここに私がやったことです:add.ctpで

(ビュー)

...

echo $this->Form->select('plan_detail_id',$plans_list); 

...機能の追加(で

)(plans_controller.phpに)

...

$plans_list = array(); 
$plans = $this->Plan->PlanDetail->find('all'); 
foreach ($plans as $row) { 
    $plans_list["{$row['PlanDetail']['id']}"] = "{$row['PlanDetail']['name']} - {$row['PlanDetailNote']['name']}"; 
} 
$this->set('plans_list', $plans_list); 
} 

...

私は救済された私のモデルを台無しにする必要はありませんでした!

ここ

はオプション出力の例へのリンクです:あなたが見ることができるように

http://prntscr.com/1jmid

関連付けられたテーブルの値に基づいて、私は「アンダー65」を付加したり、「65歳以上」 PlanDetailNote。

+0

そして、一番上に桜として、それはあなたの選択を並べ替えるようにデータの入力を容易にするためにはいつも良いです:$ plans = $ ( 'PlanDetail.name ASC')));};};}}};}}};}}};} – OldWest

関連する問題