Редактирование нескольких записей с соответствующими данными на Cakephp? - PullRequest
1 голос
/ 13 января 2011

Я разрабатываю простое приложение с CakePhp, и мне нужна помощь в создании формы редактирования с несколькими записями, используя некоторые связанные данные.

Приложение, которое я разрабатываю, довольно простое, его основная цель - управление записями студентов: обновление, удаление, изменение студента из одной группы в другую, обычные подозреваемые.

Соответствующие таблицы базы данных:

группа = ( идентификатор , учитель, аудитория и т. Д.)
groups_students = ( groupID , studentID , с тех пор, пока)
студенты = ( id , имя, фамилия и т. Д.)
помощь = ( идентификатор , помощь, дата)
aid_students ( studentID , assitanceID , метаинформация)

Как вы, возможно, поняли из приведенных выше таблиц, приложение должно помочь в записи помощи. Вот где у меня проблемы.

Что я хочу сделать, это:

  • Пользователь должен выбрать группу
  • В группе de detail у меня будет действие под названием "Register Assistance"
  • Регистрация помощника должна перенаправлять на просмотр, в котором для каждого учащегося, принадлежащего к этой группе, пользователь может просматривать помощь ученика, редактировать их и сохранять. Примерно так:

    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 = фамилия.

1 Ответ

1 голос
/ 17 января 2011

Ну, мне удалось найти решение этой проблемы. Я ждал, чтобы увидеть, найдет ли кто-нибудь что-то лучше, так как я почти уверен, что мое решение далеко не самое лучшее, но здесь, если кто-нибудь найдет этот вопрос в будущем.

Моя проблема была в том, что мне было нужно, для каждой группы, которую я выбрал для регистрации помощи:

  1. Каждый студент , принадлежавший к этой группе
  2. Все помощь студентов, принадлежащих к этой группе

Теперь, чтобы использовать Помощник по формам для редактирования этих подсказок (и после этого saveAll () метод), мне нужно было $this->data, чтобы иметь массив ann как это:

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. Для каждого учащегося получить все его / ее помощь .

Итак, для каждого студента у меня получился такой массив:

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 в структуру, подобную той, что была в начале поста. Введите Установить класс :

$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::extract или Set::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 } ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...