如何预先填充saveAll表单?

时间:2009-11-02 19:17:27

标签: cakephp

我有一个看起来像这样的表格:

                      Delete
    [Publisher One  ] []
    [Publisher Two  ] []
    [Publisher Three] []
 Add[               ]

基本上,每个发布者都会在页面中显示在自己的字段中。我可以在一个表单上修改任何发布者名称,删除任何发布者或添加新发布者,只需通过saveAll-ing表单即可。我知道这不会超过10,000行,但我使用CakePHP来重制现有工具,我相信会有一些可管理的行。

问题是在第一次加载时,我必须预先填充字段。现在,从CakePHP书中,我应该用Model.n.field创建表单。但是,我使用$ this-> Model-> find('all')提取的数据是$ data [n] [Model] [field]形式。我是否必须自己修改数据以获取$ data [Model] [n] [field]形式,或者是否有一种简单的方法可以在find命令中执行此操作,或者可能是一个辅助函数来转换它从一个到另一个?

2 个答案:

答案 0 :(得分:1)

Set类可能能够为您进行重新处理 - 请参阅CakeBookexample。其他Set类方法也可能对您有用。

答案 1 :(得分:0)

我同意,在Cake中以不同形式移动数据的困难并不是最顺利的。但你为什么不这样做:

  • 在控制器中提取数据。 $ data是第n个记录作为第一个索引的数组;然后是Modelname,然后是fieldname(抱歉令人困惑的措辞 - 这就是你上面的方法)。
在您看来

 foreach( $data as $publisher-id => $record )
 {
   echo '<tr><td>' . $record['Model']['publisher_name'] . '</td>';
   echo '<td>' . $form->input( 'Model.publisher_id', array( 'value' => $model['Modelname']['publisher_id']) ) . '</td></tr>';
 }

所以我真的不认为你需要破坏数据,或者从find操作返回的数组。试着想想你将如何输出它,你必须对它有点聪明