Datamapper:在关系中保存多个值

时间:2011-02-09 13:46:12

标签: codeigniter datamapper

我是CI和Datamapper的新手,我想我想做一件非常简单的事情。

我有一个包含3个表的数据库

 courses
 students
 students_courses 

我正在使用这个模型

学生

        <?php
           class Student extends DataMapper {
           var $has_many = array('course');
          } 

课程

        <?php
          class Course extends DataMapper {
          var $has_many = array('student');
        } 

此控制器添加学生并选择他们的课程

学生管理员

          function add(){

            $estudiante = new Student();
            $estudiante->name = $this->input->post('nombre');
            $estudiante->save();

            $user = new Student();
            $curso = new Course();


            $user->get_by_name($estudiante->name);
            $curso->get_by_name($this->input->post('curso'));

            $user->save($curso);

            $this->load->view('student/confirm');

          } 

,最后,这个表单在视图上

    <p> 
        <label for="nombre">Nombre:</label> 
        <input type="text" name="nombre" id="nombre">
    </p>

    <p> 
        <label for="nombre">Curso:</label> 
        <select multiple name="curso" id="curso">
            <?php 

            foreach($course_list as $item) {

            echo "<option value='$item->name'>" . "$item->name" . "</option>";
             }

             ?>
        </select>
    </p>

    <input type="submit" value="submit">


<?php echo form_close(); ?> 

当我想从选择列表中保存一个值时,一切都很有效...但是,我需要做些什么才能保存多个值?

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为您的问题可能与数据库建模有关。您需要在StudentCourse之间指定多对多关系。

此外,您需要迭代$this->input->post('curso')以获得学生可能拥有的所有课程。像这样:

foreach ($this->input->post('curso') as $entry)
{
    $curso = new Course();
    $curso->get_by_name($entry);
    $user->save($curso);
}

我没有使用DataMapper的经验,但我认为您的问题可以通过这种方式解决:)