CakePHP:附加到现有选择选项的附加选择框数据(来自关联模型)

时间:2011-02-07 23:52:46

标签: forms cakephp model rdbms

到目前为止,我不认为这是可能的,因为我已经使用了3.5个小时了。没有运气。

我有一张表格。

我有一个选择字段(当然选择选项),我想在选择项旁边显示相关数据。

例如:

在我的添加计划表单中,我有一个标题为“计划详细信息”的选择框。计划详细信息(模型)具有关联的计划详细信息说明(模型)(PlanDetailNote属于PlanDetail)。换句话说,每个计划明细在plan_detail_notes表中都有一个关于它的注释。

我想知道cakephp是否可以像人类一样显示它:

选择计划明细:
[计划明细选项1] - [计划明细注释]
[计划明细选项2] - [计划明细注释]
[计划明细选项3] - [计划明细注释]
[计划明细选项4] - [计划明细注释]

正如你所看到的那样,音符被附加到普通的选择选项中。仅仅是静态的,只是为了查看 - 不需要保存。

CakePHP可以实现吗?

4 个答案:

答案 0 :(得分: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); ?>

答案 1 :(得分:0)

暂时没有使用Cake,但是在您的计划详细信息控制器中,您可以在将计划详细信息注释发送到视图之前附加它吗?

答案 2 :(得分:0)

听起来像你要做的是将计划详细信息注释显示为选择框旁边的div中的文本。选择选项时,您希望div中的文本更新为所选选项的计划详细信息。

如果这是您想要发生的事情,那么这将需要一些ajax工作。基本上,您将观察“onChange”事件的选择框的字段。该事件将使用您的计划详细信息更新div的innerHtml。

我喜欢将计划详细注释存储为javascript数组或对象,然后在onChange中,将div innerHtml设置为javascript数组中的值。

答案 3 :(得分:0)

zeroSkills,

根据您的概念,我能够让它进行一些调整。这是我做的:

在add.ctp(view)

...

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

...

在函数add()中(在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

如您所见,我根据相关表PlanDetailNote的值附加了“65岁以下”或“65岁以上”。