2011-01-13 3 views
1

Je suis en train de développer une application simple avec CakePhp, et j'ai besoin d'aide pour créer un formulaire d'édition multi-enregistrements en utilisant des données connexes.Modifier plusieurs enregistrements avec des données connexes sur Cakephp?

L'application que je développe est assez simple, son but principal est la gestion des dossiers des étudiants: mise à jour, suppression, changement d'un étudiant d'un groupe à l'autre, les suspects habituels.

Les tableaux pertinents de la base de données sont les suivantes:

groupe = (id, professeur, salle de classe, etc.)
groups_students = (depuis, groupID, StudentID, jusqu'à ce que)
étudiants = (id, nom, nom de famille, etc)
assitance = (id, assitance, date)
assistance_students (idEtudiant, assitanceID, meta_information)

Comme vous pouvez avoir rassemblé des tableaux ci-dessus, l'application est censée aider en assitance d'enregistrement. C'est où j'ai quelques problèmes.

Ce que je veux faire est la suivante:

  • Est-ce que l'utilisateur de sélectionner un groupe
  • Dans le groupe de détail, je vais avoir une action appelée "Register Assistance"
  • Inscrivez-assitance devrait rediriger vers une vue dans laquelle pour chaque étudiant appartenant à ce groupe, l'utilisateur peut voir l'assitance de l'étudiant, les éditer, et enregistrer. Quelque chose comme ceci:

    example of table/form

Dans ce A représente "Absent" et P pour "Présent" et l'utilisateur peut modifier tout le monde, et la sauvegarde.

Je ne sais pas comment faire? Comment puis-je gérer cela? J'ai réussi à créer un formulaire multi-édition pour l'assistance, mais ajouter les données associées est une douleur, je ne sais pas si je devrais interroger les étudiants des contrôleurs de groupes et ensuite passer à l'action pour enregistrer l'assitance, ou gérer toute la logique à l'intérieur du contrôleur d'assitance?

Toute aide serait grande,

merci!

Edit: Voici la sortie de $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 
        ) 
     ) 

La sortie est en espagnol.Alumno = Étudiant, nombre = prénom, apellido = last_name.

+0

peut vous vider '$ this-> Student-> find ('first'), sortie' votre question . – Ish

+0

vient de l'ajouter, Ish Kumar. Merci! – jlasarte

Répondre

1

Eh bien, j'ai réussi à trouver une solution à cela. J'attendais de voir si quelqu'un trouverait quelque chose de mieux, car je suis à peu près sûr que ma solution est loin d'être la meilleure, mais voilà, au cas où quelqu'un trouverait cette question dans le futur.

Ma question était que je avais besoin, pour chaque groupe que je choisi pour vous inscrire assitance:

  1. Chaque étudiant qui appartenait à ce groupe
  2. Tous les assitances des étudiants appartenant à ce groupe

Maintenant, afin de faire usage du Form helper pour éditer ces assitences (et après, le saveAll() meth od), je besoin $this->data avoir tableau ann comme ceci:

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 
      ) 

    ) 

) 

en même temps, cependant, je avais besoin chaque étudiant lié à ses assitances, pour être en mesure de boucler leur abreuvoir, et affichage les formes d'édition pour chaque assitance dans un tableau comme celui de la question:

alt text

ce que je fini par faire est ce

  1. Tout d'abord, je interroger tous les étudiants appartenant au groupe sélectionné.
  2. Pour chaque étudiant obtenir toutes ses aides.

donc, pour chaque élève, je fini par avoir un tableau comme celui-ci:

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 
            ) 

          ) 

        ) 
      ) 

    ) 

) 

Maintenant, avec cela, je l'information nécessaire afin d'afficher la table et créer les formes, mais j'ai toujours besoin des données d'assitances dans $this->data, ainsi l'aide de forme peut créer le à partir de l'affichage des informations correctes, et afterwars, saveAll() met à jour les lignes dans la base de données correctement.

Ce que je devais faire était de transformer le tableau de $students en une structure comme celle au début de la publication. Entrez le 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'); 

Je suis assez sûr que la première aux lignes (formating le tableau des étudiants afin d'en extraire l'assitance) peut être fait avec un seul Set::extract ou Set::classicExtract, mais cela a fonctionné et les expressions régulières sont vraiment pas mon truc, alors.

Après cela, il est juste une question de creux en boucle les données et de faire la table:

<?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 } ?> 
Questions connexes