thinkPHP中1对1,多对1,多对多数据库操作的总结

thinkPHP5中的数据库的关系基本分为:一对一、多对一、多对多这三种

一.引例

1、一对一关系实例

  • 一个老师对应一个id,一个id对应一个老师

2、多对一关系实例

  • 一个班级拥有多个学生,一个学生只能够属于某个班级

3、多对多实例

  • 一个学生可以选修多门课程,一个课程可以被多个学生选修

二.一对一

一对一的关系下,thinkPHP框架可以直接访问数据库中的数据,像下面一样

class TeacherController
{
    public function index()
    {
        $Teacher = new Teacher;
        $teachers = $Teacher->select();
        var_dump($teachers);
    }
}

这样可以直接输出teacher的所有信息

三.多对一

多对一的关系


在thinkPHP5中
多个学生对应于一个班级,这种情况下的访问法则为:
2、在这个方法中,通过一个id字段来获取这个对象;

3、返回这个对象。
4,用该对象访问各种数据

以一个klass类为例子

 public function Klass()
{
   return $this->belongsTo('Klass');
}

四.多对多

多对多的访问比较复杂,需要通过中间表来完成,像这样


通过访问中间表来取得班级对应的课程
在thinkPHP5中可以自动对中间表进行操作,十分方便
但是thinkPHP中同样存在着bug:
BUG1:
在Course中关联Klass,如果不加任何设置(直接将代码写为:return $this->belongsToMany(‘Klass’);),thinkphp 会尝试找course_klass这张表;而在Klass中关联Course,那么 thinkphp 则会尝试找klass_course这张表。显然,中间表只能有一个名字。这就使得我们在使用多对多关联时,还需要设置中间表的名字。

BUG2:
当我们传入表名时,thinkphp 没有自动为我们加入表前缀。这使得我们需要手动的进行配置,但显然我更希望默认是自动加入表前缀的。

你可能感兴趣的:(学习记录,thinkPHP)