db和model用哪个开发大型项目 thinkphp_ThinkPHP:Db类和模型的正确使用

5df7413ac3555998.jpg

发现很多开发者在使用ThinkPHP5.*的时候不明白Db和模型的正确使用姿势,尤其是在5.1版本里面,如果你没有使用下面的正确姿势,有很大可能性会踩坑。

Db的正确姿势

下面是官方推荐的Db类用法(也就是每次都是静态方法调用)// 查询单个数据

Db::name('user')->where('id', 1)->find();

// 查询多个数据

Db::name('user')->where('id', '>', 1)->select();

// 写入新的数据

Db::name('user')->insert(['name' => '张三']);

// 更新数据

Db::name('user')->where('id', 1)->update(['name' => '李四']);

// 删除数据

Db::name('user')->delete(1);

很多开发者为了简化代码,喜欢使用下面的代码。但是,永远不要在5.1中使用下面的代码!// 错误的用法

$user = Db::name('user');

// 查询单个数据

$user->where('id', 1)->find();

// 查询多个数据

$user->where('id', '>', 1)->select();

// 写入新的数据

$user->insert(['name' => '张三']);

// 更新数据

$user->update(['name' => '李四']);

// 删除数据

$user->delete(1);即便是使用助手函数仍然不建议!// 仍然是错误的用法

// 查询单个数据

db('user')->where('id', 1)->find();

// 查询多个数据

db('user')->where('id', '>', 1)->select();

// 写入新的数据

db('user')->insert(['name' => '张三']);

// 更新数据

db('user')->update(['name' => '李四']);

// 删除数据

db('user')->delete(1);

很多开发者可能会奇怪,为什么是错误的用法呢?我使用的结果明明都没问题啊?这只是说明你还没踩坑罢了。

真正的原因,是5.1版本每次查询后是不会清空前次(5.0则会每次清空)的查询条件的,所以下面的用法是有效的。$user = Db::name('user');

// 查询分数大于80分的用户总数

$count = $user->where('score', '>', 80)->count();

// 查询分数大于80分的用户数据

$user->select();

看到这里你应该明白了,当你使用的是同一个数据库查询对象实例的话,查询条件是始终会保留的(也就是会导致后面的查询条件错乱),而如果你使用助手函数或者手动实例化后多次操作都是相同的对象实例,除非你像下面一样手动清除。$user = Db::name('user');

// 查询分数大于80分的用户总数

$count = $user->where('score', '>', 80)->count();

// 清除查询条件(但不包括排序或者字段等信息)

$user->removeOption('where');

// 查询所有用户数据 并按分数倒序排列

$user->order('score', 'desc')->select();

// 清除所有查询条件

$user->removeOption();

// 查询分数等于100的用户

$user->where('score', 100)->select();最佳实践:每次使用全新的Db静态查询

模型的正确姿势

模型的设计其实和Db一样,基本上不需要手动进行实例化。// 写入新的数据

$user = User::create(['name' => '张三']);

// 更新数据

$user->update(['name' => '李四']);

// 查询单个数据

$user = User::get(1);

// 删除当前模型数据

$user->delete();

上面的代码中,我们没有使用任何的实例化代码,都是使用静态方法操作。模型的实例化工作是由系统在查询或者写入数据的时候自动完成的。如果你自己手动实例化模型的话,会造成模型的重复实例化开销。

不建议的用法:$user = new User;

// 写入新的数据

$user->name = '张三';

$user->save();$user = new User;

$user->find(1);

echo $user->name;

建议用法:// 写入新的数据

User::create(['name' => '张三']);

$user = User::get(1);

echo $user->name;

所以,请不要手动实例化模型,也不建议使用model助手函数。最佳实践:模型查询和创建都使用静态方法

现在,你明白Db类和模型使用的正确姿势了么?

PHP中文网,有大量免费的ThinkPHP入门教程,欢迎大家学习!

本文转自:https://blog.thinkphp.cn/810719

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值