[size=x-large]我的Eloquent单独使用系列文章[/size]
[url=http://xieye.iteye.com/blog/2382907]php的db类库Eloquent单独使用系列(1)[/url]
[url=http://xieye.iteye.com/blog/2383390]php的db类库Eloquent单独使用系列(2) - 分页[/url]
[url=http://xieye.iteye.com/blog/2387809]php的db类库Eloquent单独使用系列(3) - sql日志[/url]
[url=http://xieye.iteye.com/blog/2387983]php的db类库Eloquent单独使用系列(4)- 事件监听[/url]
[url=http://xieye.iteye.com/blog/2383466]php的db类库Eloquent单独使用系列(5)- 模型转数组[/url]
[url=http://xieye.iteye.com/blog/2388023]php的db类库Eloquent单独使用系列(6)- 一对一关联[/url]
[url=http://xieye.iteye.com/blog/2388029]php的db类库Eloquent单独使用系列(7)- 一对多关联[/url]
[url=http://xieye.iteye.com/blog/2388150]php的db类库Eloquent单独使用系列(8)- 多对多关联[/url]
[url=http://xieye.iteye.com/blog/2388162]php的db类库Eloquent单独使用系列(9)- 多对多关联 - 表关联自身[/url]
[url=http://xieye.iteye.com/blog/2388280]php的db类库Eloquent单独使用系列(10)- 多对多关联 - 远程一对多[/url]
[url=http://xieye.iteye.com/blog/2388521]php的db类库Eloquent单独使用系列(11)- 多对多关联 - 添加模型属性[/url]
[url=http://xieye.iteye.com/blog/2389182]php的db类库Eloquent单独使用系列(12)- 结果集模型转数组 - 2[/url]

本系列文章的目的就是脱离laravel环境使用Eloquent,因为它[b]好用[/b]。
本系列文章所有代码均测试通过。Eloquent版本:5.4.27

本文的目的是彻底把laravel的结果集返回对象改成数组的问题搞定。
网上查阅好像有一种方法是改配置,可是这样的话,会影响全局,不希望如此,
所以单独写了一个查询方法,仅适用于select,并定义了很方便的4种查询方法,这样,eloquent就可以更加通用的使用在除了laravel的各种框架里!!

[size=x-large]建表[/size]
请自行插入几条数据

CREATE TABLE users (  id int(11) NOT NULL AUTO_INCREMENT,  name varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户名称',  PRIMARY KEY (`id`))

[size=x-large]源代码[/size]
主要两个文件,一个是DbSelect类,另外是客户端代码,注意实际使用中,肯定是把db对象的获取单独定义的。
DbSelect.php

<?php

namespace app\lib;

class DbSelect {    /**     * 获取常规的数据库查询结果,     * 假如结果集为空,返回[]     *      * @param \Illuminate\Database\Capsule\Manager $db laravel5框架的Eloquent的DB对象       * @param string $sql 查询语句     * @param array $bind  绑定参数     * return array 二维数组     */    public static function fetchAll($db, $sql, $bind=[])     {        $result = collect( $db::select($sql,$bind ))->map(function ($v,$k){             return get_object_vars($v);          })->toArray() ;        return $result;    }

    /**     * 获取数据库查询结果,是单列的,     * 假如sql语句中包含多列,只取第一列     * 假如结果集为空,返回[]     *     * @param \Illuminate\Database\Capsule\Manager $db laravel5框架的Eloquent的DB对象      * @param string $sql 查询语句     * @param array $bind  绑定参数     * return array 一维数组     */    public static function fetchCol($db, $sql, $bind=[])     {        $result = collect( $db::select($sql,$bind ))->map(function ($v,$k){             $a = get_object_vars($v);            foreach ($a as $k2=> $v2) {                return $v2;            }        })->toArray();        return $result;    }

    /**     * 获取数据库查询结果,是单个值,标量     * 假如sql语句中包含多列,只取第一列     * 假如结果集有多行,只取第一行     * 假如结果集为空,返回null     *     * @param \Illuminate\Database\Capsule\Manager $db laravel5框架的Eloquent的DB对象      * @param string $sql 查询语句     * @param array $bind  绑定参数     * return mixed 整型|字符串|浮点型     */    public static function fetchOne($db, $sql, $bind=[])    {        $result = collect( $db::select($sql,$bind ))->map(function ($v,$k){            if ($k==0) {                $a = get_object_vars($v);                foreach ($a as $k2=> $v2) {                    return $v2;                }            }        })->toArray();        if ($result) {            $result = $result[0];        }else {            $result = null;        }        return $result;    }

    /**     * 获取数据库查询结果,只取第一行     * 假如结果集为空,返回null     *     * @param \Illuminate\Database\Capsule\Manager $db laravel5框架的Eloquent的DB对象      * @param string $sql 查询语句     * @param array $bind  绑定参数     * return array 一维数组,对应表中的一行。     */    public static function fetchRow($db, $sql, $bind=[])    {        $result = collect( $db::select( $sql,$bind ))->map(function ($v,$k){            if ($k==0){              return get_object_vars($v);            }else {              return null;            }        })->toArray() ;        if ($result) {            $result = $result[0];        }else {            $result = null;        }        return $result;    }}

客户端代码

<?phpnamespace app\control;

use Illuminate\Database\Capsule\Manager;

class Ill7{    /**     * 客户端代码     */    public function index()     {        $db = new Manager ();        $db->addConnection ( [             'driver' => 'mysql',            'host' => '127.0.0.1',            'database' => 'test1',            'username' => 'root',            'password' => 'root',            'charset' => 'utf8mb4',            'collation' => 'utf8mb4_unicode_ci',            'prefix' => ''         ] );        $db->setAsGlobal ();        $db->bootEloquent ();

        $sql1 = "SELECT id,name FROM users   where id<10 order by id asc limit 2";// 常规无bind        $sql2 = "SELECT id,name FROM users   where id<10 order by id asc limit ?";//必须带bind        $sql3 = "SELECT id,name FROM users   where id<0  order by id asc limit 2"; //注定无结果

        echo "<h2>select - fetchAll()方法</h2>";        $result = \app\lib\DbSelect::fetchAll($db, $sql1);        var_dump($result);echo "<hr>";

        $result = \app\lib\DbSelect::fetchAll($db, $sql2,[2]);        var_dump($result);echo "<hr>";

        $result = \app\lib\DbSelect::fetchAll($db, $sql3);        var_dump($result);echo "<hr>";

        echo "<h2>select - fetchCol()方法</h2>";        $result = \app\lib\DbSelect::fetchCol($db, $sql1);        var_dump($result);echo "<hr>";

        $result = \app\lib\DbSelect::fetchCol($db, $sql2,[2]);        var_dump($result);echo "<hr>";

        $result = \app\lib\DbSelect::fetchCol($db, $sql3);        var_dump($result);echo "<hr>";

        echo "<h2>select - fetchOne()方法</h2>";        $result = \app\lib\DbSelect::fetchOne($db, $sql1);        var_dump($result);echo "<hr>";

        $result = \app\lib\DbSelect::fetchOne($db, $sql2,[2]);        var_dump($result);echo "<hr>";

        $result = \app\lib\DbSelect::fetchOne($db, $sql3);        var_dump($result);echo "<hr>";

        echo "<h2>select - fetchRow()方法</h2>";        $result = \app\lib\DbSelect::fetchRow($db, $sql1);        var_dump($result);echo "<hr>";

        $result = \app\lib\DbSelect::fetchRow($db, $sql2,[2]);        var_dump($result);echo "<hr>";

        $result = \app\lib\DbSelect::fetchRow($db, $sql3);        var_dump($result);echo "<hr>";

        echo '<br>all ok!';    }}

[size=x-large]浏览器输出[/size]

[img]http://dl2.iteye.com/upload/attachment/0126/4621/8141df6b-c5dd-3523-87de-5037c4d93b43.png[/img]

php的db类库Eloquent单独使用系列(12)- 结果集模型转数组 - 2相关推荐

  1. SAP PM 初级系列12 – 为维修工单关联Task List

    SAP PM 初级系列12 – 为维修工单关联Task List 对于一个维修工单,我们可以使用事务代码IW32 为之 attach a task list.操作方式如下, 输入一个已知的Task l ...

  2. SAP PM 入门系列12 - IW32 下达一个维护订单

    SAP PM 入门系列12 - IW32 下达一个维护订单 在SAP系统里执行事务代码IW32, 输入维护订单号100316968, 回车,进入维护订单的修改界面, 点击左上角下达按钮 , 然后保存, ...

  3. 数学之美 系列 12 - 余弦定理和新闻的分类

    数学之美 系列 12 - 余弦定理和新闻的分类 余弦定理和新闻的分类似乎是两件八杆子打不着的事,但是它们确有紧密的联系.具体说,新闻的分类很大程度上依靠余弦定理. Google 的新闻是自动分类和整理 ...

  4. 数学之美系列12(转帖)

    数学之美 系列 12 - 余弦定理和新闻的分类2006年7月20日 上午 10:12:00 发表者:吴军,Google 研究员 余弦定理和新闻的分类似乎是两件八杆子打不着的事,但是它们确有紧密的联系. ...

  5. Python Tkinter 之Listbox控件(Python GUI 系列12)

    Python Tkinter 之Listbox控件(Python GUI 系列12) 1. 序言 本章介绍Tkinter的Listbox控件,本文是Python GUI系列的第12篇文章,整个系统约2 ...

  6. openvino系列 12. Model Optimizer:PaddlePaddle 模型转化 IR 模型

    openvino系列 12. Model Optimizer:PaddlePaddle 模型转化 IR 模型 本案例展示了如何将 MobileNetV3 模型从 PaddleHub加载到本地,最终转换 ...

  7. 机器学习系列(12)_XGBoost参数调优完全指南(附Python代码)

    机器学习系列(12)_XGBoost参数调优完全指南(附Python代码) 原文链接:http://blog.csdn.net/han_xiaoyang/article/details/5266539 ...

  8. Java基础系列12: 泛型

    Java基础系列12: 泛型 本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者. 什么是泛型 直接看例子 List arrayList = new ArrayList(); a ...

  9. Urllib2库丨Python爬虫基础入门系列(12)

    提示:文末有福利!最新Python爬虫资料/学习指南>>戳我直达 文章目录 前言 Urllib2库 学习目的 urlopen GET请求方式 利用urllib2.Request类,添加He ...

最新文章

  1. js 动态校验开始结束时间
  2. Draw Call未被批处理?在Unity 5.6中如何查找原因
  3. 今天想到了关于 Django 中 view 的组织方式问题
  4. .NET Core etcd 配置源
  5. sudo apt-get install libstdc++6
  6. jmeter 跳板机_Jmeter接口测试进阶
  7. ~~朴素dijkstra算法
  8. 宗地图绘制要求和规范_国内土地市场宗地图的绘制标准制图规范-【领仕网】...
  9. python计算微分方程组_如何使用python计算常微分方程?
  10. python 解析excel模板_python 解析Excel
  11. opencv学习手册(三)(线条识别)(更新中
  12. CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pk
  13. Qt Style Sheets(QSS)参考
  14. 傻傻分不清?云存储、云计算与分布式存储、分布式计算是一回事吗?
  15. python变量无需创建赋值_阿博的Python之路-变量
  16. 一个产品经理的自述:我在腾讯工作的这一年
  17. 2023网盘扩容技术
  18. 抗住千万流量的大型分布式系统架构设计
  19. python3 爬虫之爬取安居客二手房资讯(第一版)
  20. android app 素材下载地址,素材空间app下载-素材空间 安卓版v3.4.7-PC6安卓网

热门文章

  1. ModuleNotFoundError:No module named xxx 罪魁祸首竟是虚拟环境
  2. 如何让你的Android显示gif格式的图片
  3. BUUCTF-一叶障目 解析
  4. java诺基亚nba,诺基亚携手NBA,合作跨越大中华地区
  5. 国内外EDA厂商如何谋划未来?
  6. html网站点击特效,HTML5 svg和CSS3炫酷鼠标点击按钮特效
  7. 计算机英语电子词典,电子辞典时代的英语学习陷阱
  8. 如何在路由器上刷DD-WRT固件
  9. 安全操作规程规范培训PPT模板
  10. 达尔优机械师合金版灯光