php的db类库Eloquent单独使用系列(12)- 结果集模型转数组 - 2
生活随笔
收集整理的這篇文章主要介紹了
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;
}
}
客戶端代碼
<?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]
[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]
總結
以上是生活随笔為你收集整理的php的db类库Eloquent单独使用系列(12)- 结果集模型转数组 - 2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习之递归神经网络
- 下一篇: php 数组 转 js 数组,php数组