使用Cakephp上的相关数据进行多记录编辑?

时间:2011-01-13 20:37:56

标签: php cakephp

我正在使用CakePhp开发一个简单的应用程序,并且需要一些帮助来创建使用一些相关数据的多记录编辑表单。

我正在开发的应用程序非常简单,其主要目的是管理学生记录:更新,删除,将学生从一个组更改为另一个组,通常的嫌疑人。

数据库的相关表格是:

群组 =( id ,老师,教室等)
groups_students =( groupID studentID ,因为,直到)
学生 =( id ,name,last_name等)
分享 =( id ,分享,日期)
aid_students studentID assitanceID ,meta_information)

正如您可能从上表中收集的那样,该应用程序应该有助于记录协助。这就是我遇到问题的地方。

我想做的是:

  • 让用户选择一个组
  • 在详细信息组中,我将采取一项名为"注册帮助"
  • 的操作
  • 对于属于该组的每个学生,注册协助应该重定向到一个视图,用户可以看到该学生的帮助,编辑它们并保存。像这样:

    example of table/form

其中 A 代表"缺席" P 代表"现在"并且用户可以编辑每个人和保存。

我只是不知道如何去做?我该如何管理?我已经设法为协助创建了一个多编辑表单,但添加相关数据很痛苦,我不知道是否应该从群组控制器中查询学生,然后将其传递给动作注册协助,或管理协助控制器内的所有逻辑?

任何帮助都会很棒,

谢谢!

修改:这是$this->Student->find('first');

的输出
Array ( 
    [Alumno] => Array ( 
                     [id] => 14 
                     [tipo] => dni 
                     [dni] => 2321312312 
                     [apellido] => COQUITO 
                     [nombre] => Pepe 
                     [carrera] => Composición Musical 
                     [creado] => 2011-01-08 17:59:00 
                     [modificado] => 2011-01-08 17:59:00 
                     ) 
        )

输出是西班牙语。 Alumno =学生, nombre =名字, apellido = last_name。

1 个答案:

答案 0 :(得分:1)

好吧,我设法找到了解决方法。我在等着看是否有人找到了更好的东西,因为我很确定我的解决方案远非最好的,但是如果有人在将来发现这个问题的话,就这样了。

我的问题是,我需要为我选择的每个小组注册协助:

  1. 属于该群组的每位学生
  2. 属于该组的学生的所有助理
  3. 现在,为了使用Form helper编辑这些助手(以及之后的saveAll()方法),我需要$this->data来安排像这样的数组:

    Array
    (
        [Assitance] => Array
        (
            [5] => Array
                (
                    [id] => 5
                    [date] => 2011-01-09
                    [assitance] => A
                    [updated] => 2011-01-16 21:32:00
                    [created] => 2011-01-16 21:32:00
                )
    
            [6] => Array
                (
                    [id] => 6
                    [date] => 2011-03-09
                    [assitance] => A
                    [updated] => 2011-01-16 21:32:00
                    [created] => 2011-01-16 21:32:00
                )
    
         )
    
    )
    
    但是,与此同时,我需要每个学生与他或她的助手相关联,以便能够循环播放它们,并在表格中显示每个学生的编辑表格。在问题中:

    alt text

    我最终做的是这个

    1. 首先,我查询属于所选组的所有学生
    2. 每位学生获得他/她的所有帮助
    3. 所以,对于每个学生,我最终得到了这样一个阵列:

      Array
          (
              [Student] => Array
                  (
                      [id] => 12
                      [last_name] => LASARTE
                      [name] => Julia
                      [created] => 2011-01-08 16:35:00
                      [updated] => 2011-01-08 16:35:00
                      [assitance] => Array
                          (
                              [0] => Array
                                  (
                                      [Assitance] => Array
                                          (
                                              [id] => 4
                                              [date] => 2011-01-09
                                              [assitance] => z
                                              [updated] => 2011-01-16 20:51:00
                                              [created] => 2011-01-16 20:51:00
                                          )
      
                                      [assitance_studenty] => Array
                                          (
                                              [id] => 2
                                              [student_id] => 12
                                              [assitance_id] => 4
                                              [comision] => 0
                                          )
      
                                  )
      
                          )
                  )
      
          )
      
      )
      

      现在,有了这个,我有了显示表格和创建表格所需的信息,但我仍然需要$this->data中的助理数据,因此表单助手可以创建显示正确的表格信息和后续,saveAll()正确更新数据库中的行。

      我需要做的是将$students的数组转换为类似帖子开头的结构。输入Set Class

      $formated_students = Set::combine($students, '{n}.students.id', '{n}.students');
      $assitance =  Set::extract('/presentes/Assistance', $formated_students);
      $this->data['Assistance'] = Set::combine($assistance,  '{n}.Assistance.id', '{n}.Assistance');
      

      我非常确定第一个行(格式化学生数组以便提取辅助)可以只使用一个Set::extractSet::classicExtract来完成,但这个工作和正则表达式确实是不是我的事,所以。

      之后,这只是循环数据并制作表格的问题:

      <?php 
      echo $form->create('Assistance', array('url' => array('controller' => 'Comisions', 'action' => 'register_assitance')));
      foreach ($students as $student) { ?>
          <tr><td>><?php echo $student['students']['last_name'].", ".$student['students']['name']; ?></td>
          <?php foreach ($student['students']['assitance'] as $asstiance) { ?>
              <td><?php echo $form->input('Assistance.'.$assitance['Assistance']['id'].'.id');
              echo $form->input('Assistance.'.$assitance['Assistance']['id'].'.assistance', array( 'label' => false, 'size' => 1)) ?></td>
          <?php } ?>
      </tr>
      <?php } ?>