web-dev-qa-db-ja.com

Laravel 5.1 DB:select toArray()

次のように実行している大きな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...

15

あなたが探している構造を持つことができるように、stdClassオブジェクトを配列としてキャストする必要があるようです

$result = array_map(function ($value) {
    return (array)$value;
}, $result);
26
Jose Mujica

パフォーマンスを調べる最適なソリューションは、データベースからデータを取得する方法を変更することです。

// 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);

オブジェクトの配列ではなく多次元配列を返します

16

toArray() メソッドはコレクションを配列に変換します。モデルも配列に変換されます:

toArrayメソッドは、コレクションをプレーンPHP配列に変換します。コレクションの値がEloquentモデルの場合、モデルも配列に変換されます

それで、あなたは何か間違ったことをしていると思います。さらにヘルプが必要な場合は、関連するすべてのコードで質問を更新してください。

また、Eloquentコレクション(モデル)のみにtoArray()メソッドがあります。

この方法を使用するには、Eloquentを使用します。

$result = \App\User::all()->toArray();
9
Alexey Mezenin

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フェッチモードの設定方法

2
Tobias Sette

言及する価値がある別のアプローチを次に示します。

$resultArray = json_decode(json_encode($result), true);

動作します、私はチェックしました。

1

これを試して

$result = DB::select($sql);
$arr = [];
foreach($result as $row)
{
    $arr[] = (array) $row;
}
1
huuuk

この方法でできます。

頂点で

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);
0
Parvez Rahaman

最も簡単な方法は、laravel toArray関数を使用することです。

public function toArray()
{
    return array_map(function ($value) {
        return $value instanceof Arrayable ? $value->toArray() : $value;
    }, $this->items);
}
0
Mohsen

これを試すことができます

DB::table('commune')->where('Commune','<>', 'ND')->orderBy('Commune')->get()->pluck('Commune');
0
Mourad MAMASSI

トリッキーでシンプルな方法:

//Got array in stdClass converting to JSON $temp1= json_encode($result); //JSON to Array $temp2= json_decode($temp1,1);

役立つかもしれません

0
Vish