🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### Db类实现读取单个记录 ~~~ $user = Db::table('user')->where('id', 1)->find(); //或者 $user = Db::table('user')->find(1); echo $user['id']; echo $user['name']; ~~~ 模型实现读取单个记录要比Db类简单很多,而且更加符合对象的设计。 ~~~ $user = User::get(1); echo $user->id; echo $user->name; ~~~ V5.0.8版本之前模型的get方法如果没有传值或者传入空值,会查询第一个符合条件的数据,这个问题在V5.0.8版本已经修正,get方法必须传入非空的值,否则直接返回Null。 Db类的find方法返回的是一个数组,模型类的get方法返回的是一个User模型对象实例。模型的读取操作一般使用静态方法读取即可,返回模型对象实例。 很多用户往往会写出下面的代码,理论上来说当然也没有错,其实是大可不必的。 ~~~ $user = new User; $user->find(1); ~~~ 除非你已经在User模型的对象实例内部去调用find方法读取数据,但这种方式不符合模型对象的设计原则,**一个模型对象实例应该唯一对应数据表的一条记录**。 #### Db类实现读取多个记录 ~~~ // 查询用户数据集 $users = Db::table('user') ->where('id', '>', 1) ->limit(5) ->select(); // 遍历读取用户数据 foreach ($users as $user) { echo $user['id']; echo $user['name']; } ~~~ 模型实现读取多个记录 ~~~ // 查询用户数据集 $users = User::where('id', '>', 1) ->limit(5) ->select(); // 遍历读取用户数据 foreach ($users as $user) { echo $user->id; echo $user->name ~~~ 模型的查询操作比起Db查询有一个显著的特征就是不需要每次调用table或者name方法,因为每个模型在创建的时候已经自动对应了数据表。 在读取多个记录的方式上,两种方式的区别并不大,只是默认返回数据集类型的区别,Db方式返回的数据集是一个包含每个用户数组的二维数组,而模型方式返回的数据集包含每个User模型对象实例的数组。 对于多个主键的数据读取,模型还封装了一个all方法,用法如下: ~~~ // 主键或者查询条件查询用户数据集 // 主键 1. // 相当于 Db::table('user')->select([1,2,3]); $users = User::all([1, 2, 3]); // 条件 2. //$users = User::all(['level_id'=>4]); // 遍历读取用户数据 foreach ($users as $user) { echo $user->id; echo $user->name; } ~~~ 关于模型的get和all方法的更多用法,而且也完全可以替代数据库提供的find和select方法,我们会在模型高级用法一章中给你继续深入。