#### 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方法,我们会在模型高级用法一章中给你继续深入。