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对象,然后操作数据库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

runtoweb3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值