php thinkphp5模型类,关于ThinkPHP5的数据库和模型用法

1,TP5的数据库架构

897579928bb5ce79fa5a0e4259873f99.pngDb: 是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中,对于数据库的访问有三种方法:原生sql语句。Db::query('select * from think_user where id=?',[8]);

Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);查询构造器

b120d2fbfe4fcb326d49cae48bfcf689.png

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

不同的辅助操作先后顺序没影响,但是相同的辅助操作先后顺序会有影响。不同的辅助操作,先后顺序没影响。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();模型

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中文网。

相关推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值