
发明许多开发者在运用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类和模子运用的准确姿态了么?
ki4网,有大批免费的ThinkPHP入门教程,迎接人人进修!
本文转自:https://blog.thinkki4.cn/810719
以上就是ThinkPHP:Db类和模子的准确运用的细致内容,更多请关注ki4网别的相干文章!