代码点火器关系

时间:2011-12-27 22:09:02

标签: codeigniter

我开始学习PHP Code Igniter框架,我有一个非常基本的问题,我在网上找到一些好的示例代码时遇到了问题。

假设我有2个简单的数据库表(老师和学生)。每个都有唯一的标识符字段(t_id和s_id)。每个学生都有一位老师,所以学生表中有一个s_t_id字段,代表学生所在的老师。

我希望有一个屏幕,列出所有老师和他们的学生。有点像老师是一个标题,属于那个老师的学生是副标题。

我想我可以做到这一点,但我不确定这是否是正确的做法,还是更多的是黑客攻击?

我有老师和学生的模特,每个人都有一个控制器。

但是我在教师的视图中加载了它们的所有数据。所以我的老师控制器代码是这样的:

$data['teachers'] = $this->teachers_model->get_teachers();
$data['students'] = $this->students_model->get_students();

在我看来,我只是通过老师循环,让每个教师在每次迭代中让学生从传递到视图的数组中获取。

这看起来像是在MVC模式之后执行此操作的正确方法吗?或者这只是一个黑客?对于老师来说,把学生装在控制器里似乎很尴尬。

3 个答案:

答案 0 :(得分:0)

查看sparks包(php-activerecord

它在映射关系方面做得不错

models / Teacher.php {模型名称=单数(教师),数据库表格=复数(教师)}

class Teacher extends ActiveRecord\Model
{
    public static $has_many = array(array('Student'));

    //alternative is not to include where(conditions) clause

    public static function get_student_list($teacher_id){
         return (array) self::find(
                        'all', array(
                        'include'=>array('student'), //eager loading
                        'conditions'=>array('id=?', $teacher_id))
                         )->students;
    }
}

<强>模型/ Student.php

class Student extends ActiveRecord\Model
{
    public static $belongs_to = array(array('Teacher'));

}

教师控制器

class Teacher extends CI_Controller
{
public function __construct(){parent::__construct();}

public function index()
{
    $this->load->view('teachers/_index', array(
          'students' => Teacher::get_student_list($this->teacher_id)
    ));
}
}

要让它适合您,请阅读wiki php-activerecord

答案 1 :(得分:0)

如果数据库服务器执行与数据库相关的所有操作,我认为这是最佳实践。 如果我理解正确,你想要类似的:

Teacher1
  Student1
  Student2
Teacher2
  ....

我认为你需要类似的东西:

 SELECT teacher.name, GROUP_CONCAT(student.name) AS students
 FROM teacher
 JOIN student ON teacher.t_id=student.s_t_id
 GROUP BY teacher.t_id

也许这个查询并不完美,但我认为它会产生一些行,第一列是教师的名字,第二列是他/她的学生用逗号分隔。如果逗号不是分隔符,您可以更改它,请参阅manual

在此之后,您可以使用explode,这样您就可以获得指定教师学生的数组。

所以你可以通过一个sql-query解决你的问题,一些(与教师数相同)php的爆炸功能。

答案 2 :(得分:0)

如果我是你,我会这样做,

数据库

学生表

id         : 1
name       : David
teacher_id : 2

教师表

id          :1
name        : Sean

id          : 2
name        : Rose

您的控制器 //我正在加载一个名为“view / index.php”的视图

function index()
{
   $data['teachers'] = $this->teachers_model->get_teachers();
   $data['students'] = $this->students_model->get_students();
   $this->load->view('index',$data);
}

您的观点

<?php

                foreach ($teacher as $t)
                {
                   echo 'Teacher Name:'.$t['name'];
                   echo '<br>';
                   foreach ($students as $s)
                   {
                       if($s['teacher_id]==$t['id'])
                       {
                            echo 'Student Name:'.$s['name'];
                            echo '<br>';
                       }
                   }
               }
    ?>