[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]
请自行插入几条数据
[size=x-large]源代码[/size]
主要两个文件,一个是DbSelect类,另外是客户端代码,注意实际使用中,肯定是把db对象的获取单独定义的。
DbSelect.php
客户端代码
[size=x-large]浏览器输出[/size]
[img]http://dl2.iteye.com/upload/attachment/0126/4621/8141df6b-c5dd-3523-87de-5037c4d93b43.png[/img]
[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;
}
}
客户端代码
<?php
namespace 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]