TP5.1数据库操作

数据库操作有两种方式,

一种是直接通过Db类

// table方法必须指定完整的数据表名
Db::table('think_user')->where('id',1)->find();
Db::name('user')->where(['name'=>'aa'])->select();
Db::query("select * from think_user where status=1");

Db类重要属性,都是静态属性,静态方法

$connection:数据库连接对象
$config:数据库配置

Db类重要方法

init(),在框架的初始化应用中执行,传入数据库配置项。

connect(),创建数据库连接对象实例(根据配置type选择对应的数据库类型),然后把连接对象注入到Query类,方法返回Query实例。Query实例通过连接对象,封装了很多查询方法,比如table(),name(),select(),find()....;其实使用Db类做查询的各种链式方法,都是通过Query实例来实现的。

__callStatic($method, $args),当调用Db类不存在的静态方法时,会调用这个方法

//其实是执行Query实例的方法
public static function __callStatic($method, $args)
    {
        return call_user_func_array([static::connect(), $method], $args);
    }

 通过Model类实现操作数据库

1.为一个表创建一个model类,并且继承\think\Model,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写

2.程序可以通过model类操作数据库,比如User表的model

User::where('status', 1)->limit(3)->order('id', 'asc')->select();

Model类重要属性

$name:表名

$connect:连接配置

Model重要方法

1.构造方法, 获取表名,数据库连接配置等数据。

2.__callStatic,静态方式调用Model不存在的方法执行,回调Query对象的方法,执行Query类封装好的方法。

public static function __callStatic($method, $args)
    {
        $model = new static();
        return call_user_func_array([$model->db(), $method], $args);
    }

首先用model的db方法获取Query实例,其实也是通过Db::connect来获取。

// 设置当前模型 确保查询返回模型对象
        $query = Db::connect($this->connection, false, $this->query);
        $query->model($this)
            ->name($this->name)
            ->json($this->json, $this->jsonAssoc)
            ->setJsonFieldType($this->jsonType);

3.__call(),实例化model对象,调用model不存在的方法,实际也是回调Query对象的方法。

public function __call($method, $args)
    {
        if ('withattr' == strtolower($method)) {
            return call_user_func_array([$this, 'withAttribute'], $args);
        }
        return call_user_func_array([$this->db(), $method], $args);
    }

 4.Model还封装了一些独有的方法,例如insertData(),saveAll(),delete()等。实际也是通过db方法获取到Query对象,然后操作数据库。

猜你喜欢

转载自blog.csdn.net/littlexiaoshuishui/article/details/103413930
今日推荐