Основные операции CRUD с Codeigniter и Datamapper

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

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

 student
 courses
 student_courses

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

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

большое спасибо

1 ответ

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

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

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 для сохранения массива в одном операторе, но мне нужно это изучить.

Другие вопросы по тегам