次のように実行している大きなSQLステートメントがあります。
$result = DB::select($sql);
例えば
$result = DB::select('select * from users');
結果を配列にしたいのですが、現時点では、オブジェクトの配列などの構造を返します...
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);
パフォーマンスを調べる最適なソリューションは、データベースからデータを取得する方法を変更することです。
// 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-PDOフェッチモードの設定方法
言及する価値がある別のアプローチを次に示します。
$resultArray = json_decode(json_encode($result), true);
動作します、私はチェックしました。
これを試して
$result = DB::select($sql);
$arr = [];
foreach($result as $row)
{
$arr[] = (array) $row;
}
この方法でできます。
頂点で
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');
トリッキーでシンプルな方法:
//Got array in stdClass converting to JSON $temp1= json_encode($result); //JSON to Array $temp2= json_decode($temp1,1);
役立つかもしれません