我有一个大的SQL语句,我正在执行如下:
$result = DB::select($sql);
例如
$result = DB::select('select * from users');
我希望结果是一个数组 - 但此刻它返回一个像这样的结构,一个带有Objects的数组......
Array
(
0 => stdClass::__set_state(array(
'id' => 1,
'first_name' => 'Pavel',
'created_at' => '2015-02-23 05:46:33',
)),
1 => stdClass::__set_state(array(
'id' => 2,
'first_name' => 'Eugene',
'created_at' => '2016-02-23 05:46:34',
)),
...etc...
)
看起来您需要将stdClass对象转换为数组,以便您可以拥有所需的结构
$result = array_map(function ($value) {
return (array)$value;
}, $result);
一个棘手而简单的方法:
//Got array in stdClass converting to JSON
$temp1= json_encode($result);
//JSON to Array
$temp2= json_decode($temp1,1);
可能它会帮助你
考虑性能的最佳解决方案是改变从数据库中获取数据的方法:
// get original model
$fetchMode = DB::getFetchMode();
// set mode to custom
DB::setFetchMode(\PDO::FETCH_ASSOC);
// get data
$result = DB::select($sql);
// restore mode the original
DB::setFetchMode($fetchMode);
显然,如果你想将所有数据作为数组获取,那么在config/database.php
中更改就足够了:
'fetch' => PDO::FETCH_CLASS,
成
'fetch' => PDO::FETCH_ASSOC,
然后只运行:
$result = DB::select($sql);
将返回多维数组而不是对象数组
toArray()
方法将集合转换为数组。模型也转换为数组:
toArray
方法将集合转换为普通的PHP数组。如果集合的值是Eloquent
模型,模型也将转换为数组
所以,我猜你做错了什么。如果您需要更多帮助,请使用所有相关代码更新您的问题。
此外,只有Eloquent集合(模型)具有toArray()
方法。
要使用此方法,请使用Eloquent:
$result = \App\User::all()->toArray();
对于laravel / lumen 5.4(使用照明/数据库5.4):
$pdo = DB::getPdo();
$statement = $pdo->prepare($yourQuery);
$statement->setFetchMode(\PDO::FETCH_ASSOC);
$statement->execute();
$results = $statement->fetchAll();
或者收听Illuminate \ Database \ Events \ StatementPrepared事件:Laravel 5.4 - How to set PDO Fetch Mode?
试试这个
$result = DB::select($sql);
$arr = [];
foreach($result as $row)
{
$arr[] = (array) $row;
}
这是另一种值得提及的方法:
$resultArray = json_decode(json_encode($result), true);
它工作,我检查。
你可以这样做..
在顶部
use DB;
use PDO;
--------------------
DB::setFetchMode(PDO::FETCH_ASSOC); // Set the fetch mode as array
$result = DB::select('select * from users');
例如,现在您可以像这样获得结果。
$first_email = $result[0]['email'];
现在您可以更改为默认提取模式。
DB::setFetchMode(PDO::FETCH_CLASS);
最简单的方法是使用laravel toArray函数:
public function toArray()
{
return array_map(function ($value) {
return $value instanceof Arrayable ? $value->toArray() : $value;
}, $this->items);
}
你可以试试这个
DB::table('commune')->where('Commune','<>', 'ND')->orderBy('Commune')->get()->pluck('Commune');