Основные операции CRUD с Codeigniter и Datamapper - PullRequest
2 голосов
/ 08 февраля 2011

Я совершенно новичок в Codeigniter и Datamapper, и у меня есть очень фундаментальный вопрос, на который я сам не могу найти ответы в документации.

У меня очень простая база данных с 3 таблицами:

 student
 courses
 student_courses

Теперь я понимаю, как работают отношения, выполняет CRUD-операции с CI и т. Д. ..... но как я могу стабилизировать отношения между студентами и курсами, используя форму, которую необходимо заполнитьuser?

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

Спасибо большоемного

1 Ответ

3 голосов
/ 09 февраля 2011

Во-первых, используя Datamapper с CI, будет проще, если вы назовете таблицу «student» «student».Затем объединительная таблица 'courses_students' (спасибо Shauna).Тогда вашими моделями будут «студент» и «курс».

Контроллер формы может быть примерно таким (в идеале, вы бы поместили форму в представление):

function form() {
     echo "<form method='post' action='submitForm'>";
     echo "<input type='text' name='student_name'>";
     echo "<select name='courses[]' multiple='multiple'>";
     $c = new Course();
     $c->get();
     foreach($c as $course) {
         echo "<option value='{$course->id}'>{$course->name}</option>";
     }
     echo "</select>";
     echo "<input type='submit' value='Submit'>";
}

Контроллер для отправки формы (без проверки или проверок XSS):

function submitForm() {
     $s = new Student();
     $s->name = $this->input->post('student_name');
     // an initial save to the Students table, might be omitted
     $s->save();
     $course_array = $this->input->post('courses');
     // loop through the Courses, get them from db, and save the relationship
     foreach($course_array as $k=>$v) {
          $c = new Course($v);
          $s->save($c);
     }
}

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

...