关于ThinkPHP5的数据库和模型用法

jacklove
发布: 2018-06-15 11:07:38
原创
5248人浏览过

1,TP5的数据库架构

这里写图片描述

Db:  是TP5操作数据库的入口类。它的作用是为连接数据库做准备,我们只需要在database.php里填写相应的配置即可。
登录后复制
Connection: 是TP5的连接器类,因为TP5支持四种数据库(Mysql,Pgsql,Sqlite,Sqlsrv),所以TP5封装了一个类来提供统一的调用接口来支持我们连接数据库(这里的连接是惰性连接,只有在执行SQL的时候才会真正连接)。
登录后复制
Query: 查询器,因为不同数据库的SQL语句不同,所以封装了一个Query类来提供统一的接口,以实现不同数据库的CURD操作。查询器是TP5数据访问层的核心,它连接了Connection和Builder。
登录后复制
Builder: 生成器。这个类主要是把Query的查询参数生成相应的sql语句,然后把其返回给Connection供其使用。
登录后复制

2, 数据库的访问

在tp5中,对于数据库的访问有三种方法:

  1. 原生sql语句。

Db::query('select * from think_user where id=?',[8]);
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
登录后复制
  1. 查询构造器

这里写图片描述

需要注意的是,上述的查询方法中find,select,insert,update,delete都是查询操作,其他的都是辅助操作,辅助操作返回的是个对象,支持链式调用。但一旦执行了查询操作,就不能继续调用了。

立即学习PHP免费学习笔记(深入)”;

不同的辅助操作先后顺序没影响,但是相同的辅助操作先后顺序会有影响。

不同的辅助操作,先后顺序没影响。Db::table('banner')->where('id', '>', '2')->order('update_time asc')->select();Db::table('banner')->order('update_time asc')->where('id', '>', '2')->select();
登录后复制
相同的查询操作,先后顺序有影响。
$list = Db::table('data')
    ->where('id', '>', 1)
    ->where('name', 'like', '%think%')
    ->order('id', 'desc')
    ->order('create_time', 'desc')
    ->limit(8)
    ->select();
$list = Db::table('data')
    ->where('name', 'like', '%think%')
    ->where('id', '>', 1)
    ->order('create_time', 'desc')
    ->order('id', 'desc')
    ->limit(8)
    ->select();
登录后复制
  1. 模型

ORM  Object Relation Mapping 对象关系映射

就是通过模型来映射到我们的数据库中的表,然后通过操作模型来操作数据库。

我们通过和查询构造器对比来看

// 查询操作$user = Db::table('user')->find(1);// 取值操作echo $user['name'];echo $user['email'];// 设置操作$user['name']  = 'topthink';$user['email'] = 'thinkphp@qq.com';// 更新操作Db::table('user')->update($user);
登录后复制

如果是模型操作的话,就可以对应下面的代码实现

// 查询操作$user = User::get(1);// 取值操作echo $user->name;
echo $user->email;// 设置操作$user->name  = 'topthink';$user->email = 'thinkphp@qq.com';// 更新操作$user->save();
登录后复制

这里是在模型的外部,也就是控制器里的取值和设置操作,但是在模型内部,是使用如下方式:

// 取值操作echo $user->getData('name');
echo $user->getData('email');// 设置操作echo $user->data('name', 'SpawN');
echo $user->data('email', '123@qq.com');
登录后复制

模型的CURD操作

创建

Db 用法:

Db::table('user')->insert([    'name' => 'spawn',    'email' => '123@qq.com'])
登录后复制

模型用法:

$user = new User;$user->save([    'name' => 'spawn',    'email' => '123@qq.com'])$user = User::create([    'name' => 'sapwn',    'email' => '123@qq.com'])
登录后复制

总结:

  • save(动态)  返回: 影响的记录数

  • create(静态)  返回:模型对象实例  (可以直接调用方法)

读取

Db :

$user = Db::table('user')->where('id', 1)->find();
登录后复制

模型:

$user = User::get(1);
登录后复制

需要注意的是,find和select是查询构造器的方法,get和all是模型的方法。但模型又是基于查询构造器的,所以模型可以调用find和select方法,但是查询构造器不能调用get和all方法

总结:

方法    作用            返回值
get 查询单个记录  模型对象实例
find    查询单个记录  模型对象实例
all 根据主键查询多个记录  包含模型对象实例的数组或者数据集
select  根据条件查询多个记录  包含模型对象实例的数组或者数据集

更新

Db :

Db::table('user')->where('id', 1)->update([    'name' => 'haha',    'email' => 'heihei@qq.com'])
登录后复制

模型:

$user = User::get(1);$user->save([    'name' => 'haha',    'email' => 'heihei@qq.com'])

或者 

User::update([    'name'  => 'topthink',    'email' => 'topthink@qq.com',
], ['id' => 1]);
登录后复制

总结:

方法  作用  返回值
save    更新数据    影响的记录数
update  更新数据(静态)    返回模型对象实例

需要注意的是,模型的更新操作是只更新有变化的数据。性能比较好。
登录后复制

删除

Db:

Db::table('user')->delete(1);
登录后复制

模型:

$user = User::get(1);$user->delete();
或者
User::destory(1);
登录后复制

总结:

方法  作用  返回值
delete  删除当前数据  影响的记录数
destroy 删除指定数据(静态)  影响的记录数

现在我们已经掌握了模型的基本CURD操作,我们来总结下方法区别:

用法  Db类 模型(动态)  模型(静态)
创建  insert  save    create
更新  update  save    update
读取单个    find    find    get
读取多个    select  select  all
删除  delete  delete  destroy

本文讲解了关于ThinkPHP5的数据库和模型用法 ,更多相关内容请关注php中文网。

相关推荐:

关于thinkphp5.0数据库操作的案例

列举ThinkPHP5与ThinkPHP3的一些异同点

创建一个最简单的ThinkPhp项目工程

以上就是关于ThinkPHP5的数据库和模型用法的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号