2011-02-07 2 views
2

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

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

student 
courses 
student_courses 

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

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

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

ответ

3

Во-первых, используя DataMapper с CI, это будет легче, если вы назвали «студент» таблицы «студентов». Затем присоедините таблицу «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 для сохранения массива в одном утверждении, но мне нужно было бы это исследовать.

+1

CI Datamapper ищет столы Join, ища имена, которые являются алфавитными, поэтому вы действительно хотите, чтобы 'courses_students' для вашего имени Join table. – Shauna

+0

хорошо пункт. Я об этом не думал. – TerryMatula

Смежные вопросы