【问题标题】:Basic CRUD operations with Codeigniter and Datamapper使用 Codeigniter 和 Datamapper 的基本 CRUD 操作
【发布时间】:2011-02-07 21:56:48
【问题描述】:

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

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

 student
 courses
 student_courses

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

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

非常感谢

【问题讨论】:

    标签: codeigniter codeigniter-datamapper


    【解决方案1】:

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

    【讨论】:

    • CI Datamapper 通过查找按字母顺序排列的名称来查找联接表,因此您实际上需要 courses_students 作为联接表名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多