2.6 模型支持

第 13 节 / 共 46 节 课程:ThinkPHP
上一节的数据库操作比较麻烦,首先需要连接,然后再执行sql语句,最后处理返回的结果。下面介绍一种更方便的技术:ORM。
所谓ORM是对象-关系模型(Object Rational Model),指的是数据库表和php类的一一对应的关系。
项目里面已经写好了几个这样的php类
1.Users.PHP
这是一个数据库映射类,类的所有属性都和表一一对应。表在app/model/Users.php。这里User类就表示这是一个实体类,对应着数据库的表users。关键代码可看注释:
<?php
namespace app\model;
use think\Model;
// 模型类必须继承think\Model类
class Users extends Model {
    // 如果主键名不为id,则必须手工指定主键名称
    protected $pk = 'userid';
    // 为当前模型指定表名称,如果类名与表名一致,则可以不用指定
    protected $name = 'users';
    // 用户表与文章表之间一对多的关系,函数名称建议为表名
    public function article()
    {
        // 指定与模型类Aticle建立一对多关系,通过外键userid进行关联
        return $this->hasMany(Article::class, 'userid');
    }
    // 定义一个查询方法,根据userid查询用户表的一行数据
    public function findByUserid($userid) {
        $user = $this->find($userid);
        return $user;   // 直接以关联数组返回一行数据
    }
    // 再定义一个查询所有用户表数据的方法,返回所有必须使用select方法
    public function findAll() {
        $users = $this->select();
        return $users;
    }
}
2.测试一下
下面是使用方法,可以看到,进行数据库操作的时候再也不用连接、执行SQL等麻烦的事情。
<?php
namespace app\Controller;
use app\BaseController;
use think\captcha\facade\Captcha;
use app\model\Users;
class Demo extends BaseController{
//....其他函数
public function basic(){
    $user = new Users();
    $row = $user->findByUserid(1);
    return json($row);
}
}
记得要设置路由 router/app.php,让请求/basic绑定到上面这个函数
最后通过localhost/basic, 看是否能返回id为1的用户的数据。

3.典型错误
修改数据库配置 config/database.php:
需要把username从qiang改成root
把password从'123456'改成''
数据库名woniu必须一致
如果还是出账号qiang密码错的错误提示,如图所示:
那么就是.env文件还要修改,项目下有一个.env文件,里面是数据库的连接配置:
它仍然是旧的数据,改掉它们就可以正确显示了:


4.修改上一节的做法
上一节的登录使用的方法过于冗长,如果有多个查询,就要重复复制那些连接信息、多次连接,一旦账号密码有变动,那么改动起来就非常麻烦。采用这一节的方法,重新把登录完成