Mojolicious数据库操作(十二)
之前的几篇,我们已经讲完了mojo::mysql::database模块中db对象的所有方法。本篇起,我们要讲一个常用的,且十分重要的对象,便是db对象方法返回的结果——results对象。
Mojo::mysql::Results是mojo::mysql::database方法返回语句句柄的容器。
results有两个属性,db和sth。
其中db属性代表mojo::mysql::dtabase对象,sth代表着mojo::mysql::database对象的某个方法返回的SQL语句句柄的结果:
#db属性 my $db = $results->db; $results = $results->db(Mojo::mysql::Database->new); #sth属性 my $sth = $results->sth; $results = $results->sth($sth);
下面开始我们讲results的方法,首先要说明的是results模块继承自Mojo::Base,该模块的所有方法都可以用在results对象中。
一、array
my $array = $results->array;
results对象调用该方法可以返回一个数组引用。该数组引用代表着数据库中获取的一行数据,每一个字段按照固定的顺序在这个数组中排列着。
大家此时会有一个疑问,如果是select查询语句,可能会返回多行数据。此时,我们使用一个while循环即可:
while (my $next = $results->array) { say $next->[3]; #返回每一行的第三个字段的值 }
二、arrays
my $collection = $results->arrays;
arrays方法返回一个数组引用的数组引用。什么意思呢?数据行的数组引用,举个例子,当我使用select * from table返回的所有行数据会组成一个数组引用,而每一行的各个字段会组成一个数组引用(这个数组引用便是前面那个数组引用的成员):
say $results->arrays->reduce(sub { $a->[3] + $b->[3] }); #将每一个数据的第三个字段的值相加。
三、columns
my $columns = $results->columns;
返回一个数组引用,数组中的成员是列,也就是字段的名字。
四、expand
前一篇博文中我们提到过,该方法是将数据库字段中存放的json数据解析为perl的数据结构。
$results = $results->expand; $results = $results->expand(1);
当该方法的参数为1时会将所有的列扩展为一个json数组或对象
# Expand JSON $results->expand->hashes->map(sub { $_->{foo}{bar} })->join("\n")->say; #将results对象扩展为一个散列数组引用,然后通过map方法提取bar的值,生成数组后用回车符连接成字符串,显示出来。