2

我是 Codeigniter 和 Datamapper 的新手,我有一个非常基本的问题,我自己在文档中搜索无法回答。

我有一个非常简单的数据库,有 3 个表:

 student
 courses
 student_courses

现在,我了解了这些关系是如何工作的,使用 CI 进行 CRUD 操作等......但是我如何使用必须由用户填写的表格来建立学生和课程之间的关系?

想象一下,我有一个表单,用户必须填写学生的姓名并选择两个或更多课程……控制器的外观如何?

非常感谢

4

1 回答 1

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 将数组保存在一个语句中的方法,但我需要对此进行研究。

于 2011-02-09T18:09:25.020 回答