我们在《Jsnpp框架如何查询数据库记录》一文里面介绍了怎么查询数据库的记录,通过学习我们已经知道怎么实现单记录查询,多记录查询,以及分页查询,这一篇教程我们将进一步学习怎么获取查询后的结果集。
Jsnpp里面要获取数据库查询后的结果集,需要用到Jsnpp的盒子,我们在教程《Jsnpp框架的盒子简介》一文里面已经学习了Jsnpp盒子的基本概念和基本使用方法,这一篇我们将学习Jsnpp的盒子怎么在数据库查询语句里面应用。
单记录查询获取结果集:
我们先看下面的代码:
$this->app->db->table('users')->where('id', 3)->field('id,name')->box('user')->find()->finish();
上面的语句是单记录查询语句,这个语句我们前面的教程里面已经做过示例,我们可以观察一下上面的语句跟前面我们做示例的单记录查询语句有什么区别。
仔细观察后,您会发现,这里的语句仅仅是多了“->box('user')”,其他是一样的。“->box('user')”的意思是,把数据库查询后的结果放入“user”这个盒子里面,盒子名“user”您可以自己设定。
现在,我们在后续的代码里面就可以用以下语句来获得数据库查询后的结果了:
$user = $this->box->get('user')
上面的语句我们前面的教程里面学习过,应该比较熟悉了,就是把盒子里面的内容取出来,然后赋值给变量“$user”。
给变量赋值后,我们就可以用下面的方式获取变量“$user”里面的“id”和“name”了:
$id = $user['id'];
$name = $user['name'];
我们在学习单记录查询的时候介绍过,单记录查询的结果集是一维数组,所以我们可以用上面所示的方法来获取里面的值。
多记录查询获取结果集:
我们再来看多记录的情况,看下面的代码:
$this->app->db->table('users')->where('id', '>', 3)->field('id,name')->box('users')->select()->finish();
我们还是来观察上面的代码,并且跟前面我们学习过的多记录查询的语句进行比较,我们发现跟单记录一样,语句的变化只是多了“->box('user')”,其他都一样。
“->box('user')”表示,我们把多记录的查询结果放入了“user”这个盒子里面。同样地,后面我们可以使用下面的语句来取出盒子里面的数据:
$users = $this->box->get('users');
上面的语句是从盒子“users”里面取出内容,并把取出的内容赋值给变量“$users”,现在我们可以对变量“$users”作循环输出操作。
foreach($users as $val){
echo $val['id'] . ': ' . $val['name'];
}
由于多记录查询的结果集是一个二维数组,所以我们可以通过“foreach”来循环输出。
分页查询获取结果集:
下面我在来看分页查询的情况,您应该已经猜到,分页查询语句里面怎么应用盒子了,没错,也是很简单的,看下面的示例代码:
$this->app->db->table('users')->where('id', '>', 3)->field('id,name')->paging(10)->box('users')->select()->finish();
我们看到,语句的变化也是仅仅添加了“->box('users')”,就可以把分页查询的结果集放入盒子“users”了,当然盒子的名称您可以自己设定,只需要在后续代码里面使用您设定的这个盒子名就可以了。
同样地,我们可以把分页的结果集赋值给一个变量,如下面的代码:
$users = $this->box->get('users');
然后我们就可以通过变量“$users”输出结果集里面的内容了。但是分页的结果集并不是二维数组,而是一个组合数组,所以我们输出分页结果时,跟多记录是有区别的,看下面的示例代码:
foreach($users['data'] as $val){比较一下上面的代码跟前面的foreach代码,我们可以看到,这里是对“$users['data']”作循环输出,而不是前面代码里面的“$users”,因为分页的数据库查询结果是存放在“$users”的“data”里面的。
echo $val['id'] . ': ' . $val['name'];
}