2011-02-07 80 views
0

到目前为止,我认为这是不可能的,因为我现在已经使用了3.5小时。没有运气。CakePHP:附加到现有选择选项的附加选择框数据(来自关联模型)

我有一个表格。

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

例如:

在我添加计划形式,我有题为计划详细信息选择框。计划详细信息(模型)有计划详细说明(型号)(PlanDetailNote属于PlanDetail),这是相关的。换句话说,每个Plan Detail在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->深度以包含更深的相关模型PlanDetail。我知道你不可能知道我的关系,不会看到我的表格模式。感谢这个伟大的方向:) – OldWest 2011-02-08 17:56:30

+0

几乎只是写了解释我的答案的代码lol – Stoosh 2011-02-08 23:43:03

0

有一段时间没有与Cake一起工作,但是在您的Plan Details控制器中,您可以在将它发送到视图之前不附加Plan Detail Notes?

0

听起来像你想要做的是在选择框旁边的一个div中显示计划详细记录作为文本。当你选择一个选项,要在DIV文本进行更新,以计划详情注意所选选项。

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

我喜欢将计划明细笔记作为javascript数组或对象存储,然后onChange将div innerHtml设置为javascript数组中的值。

+0

我很欣赏你的想法:)我只是不太熟悉使用Ajax助手并且完成所有这些。我认为有一种方法可以在控制器中将字段数据附加到find(list ..选项,它设置关系。在这一点上寻找最简单的方法:) – OldWest 2011-02-08 00:19:42

0

zeroSkills,根据您的概念

我能得到它与一些调整工作。下面是我做的:

在add.ctp(视图)

...

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

正如你可以看到,我所附“在65”基于相关联的表的值或“超过65” PlanDetailNote。

相关问题