php的db类库Eloquent单独使用系列(12)- 结果集模型转数组 - 2
[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相关推荐
- SAP PM 初级系列12 – 为维修工单关联Task List
SAP PM 初级系列12 – 为维修工单关联Task List 对于一个维修工单,我们可以使用事务代码IW32 为之 attach a task list.操作方式如下, 输入一个已知的Task l ...
- SAP PM 入门系列12 - IW32 下达一个维护订单
SAP PM 入门系列12 - IW32 下达一个维护订单 在SAP系统里执行事务代码IW32, 输入维护订单号100316968, 回车,进入维护订单的修改界面, 点击左上角下达按钮 , 然后保存, ...
- 数学之美 系列 12 - 余弦定理和新闻的分类
数学之美 系列 12 - 余弦定理和新闻的分类 余弦定理和新闻的分类似乎是两件八杆子打不着的事,但是它们确有紧密的联系.具体说,新闻的分类很大程度上依靠余弦定理. Google 的新闻是自动分类和整理 ...
- 数学之美系列12(转帖)
数学之美 系列 12 - 余弦定理和新闻的分类2006年7月20日 上午 10:12:00 发表者:吴军,Google 研究员 余弦定理和新闻的分类似乎是两件八杆子打不着的事,但是它们确有紧密的联系. ...
- Python Tkinter 之Listbox控件(Python GUI 系列12)
Python Tkinter 之Listbox控件(Python GUI 系列12) 1. 序言 本章介绍Tkinter的Listbox控件,本文是Python GUI系列的第12篇文章,整个系统约2 ...
- openvino系列 12. Model Optimizer:PaddlePaddle 模型转化 IR 模型
openvino系列 12. Model Optimizer:PaddlePaddle 模型转化 IR 模型 本案例展示了如何将 MobileNetV3 模型从 PaddleHub加载到本地,最终转换 ...
- 机器学习系列(12)_XGBoost参数调优完全指南(附Python代码)
机器学习系列(12)_XGBoost参数调优完全指南(附Python代码) 原文链接:http://blog.csdn.net/han_xiaoyang/article/details/5266539 ...
- Java基础系列12: 泛型
Java基础系列12: 泛型 本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者. 什么是泛型 直接看例子 List arrayList = new ArrayList(); a ...
- Urllib2库丨Python爬虫基础入门系列(12)
提示:文末有福利!最新Python爬虫资料/学习指南>>戳我直达 文章目录 前言 Urllib2库 学习目的 urlopen GET请求方式 利用urllib2.Request类,添加He ...
最新文章
- js 动态校验开始结束时间
- Draw Call未被批处理?在Unity 5.6中如何查找原因
- 今天想到了关于 Django 中 view 的组织方式问题
- .NET Core etcd 配置源
- sudo apt-get install libstdc++6
- jmeter 跳板机_Jmeter接口测试进阶
- ~~朴素dijkstra算法
- 宗地图绘制要求和规范_国内土地市场宗地图的绘制标准制图规范-【领仕网】...
- python计算微分方程组_如何使用python计算常微分方程?
- python 解析excel模板_python 解析Excel
- opencv学习手册(三)(线条识别)(更新中
- CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pk
- Qt Style Sheets(QSS)参考
- 傻傻分不清?云存储、云计算与分布式存储、分布式计算是一回事吗?
- python变量无需创建赋值_阿博的Python之路-变量
- 一个产品经理的自述:我在腾讯工作的这一年
- 2023网盘扩容技术
- 抗住千万流量的大型分布式系统架构设计
- python3 爬虫之爬取安居客二手房资讯(第一版)
- android app 素材下载地址,素材空间app下载-素材空间 安卓版v3.4.7-PC6安卓网