web-dev-qa-db-ja.com

DBクエリビルダーtoArray()laravel 4

メソッドtoArray()を使用してクエリを配列に変換しようとしていますが、クエリビルダーでは機能しません。それを変換するためのアイデアはありますか?

DB::table('user')->where('name',=,'Jhon')->get()->toArray();
35

toArrayはEloquentのモデルメソッドなので、Eloquentモデルが必要です。これを試してください。

 User::where('name', '=', 'Jhon')->get()->toArray();

http://laravel.com/docs/eloquent#collections

49
petkostas

Eloquentの代わりにQuery Builderを使用する場合の解決策は次のとおりです。

$result = DB::table('user')->where('name',=,'Jhon')->get();

最初の解決策

$array = (array) $result;

2番目の解決策

$array = get_object_vars($result);

番目のソリューション

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

それが役立つことを願っています

42

以下に示すオプションは、明らかにLaravel 5.4(@Alexに感謝)の時点でサポートされていないことに注意してください。

Laravel 5.3以下では、selectクエリ用に フェッチモードを設定 するメソッドがあります。

この場合、次のようにする方が効率的です。

DB::connection()->setFetchMode(PDO::FETCH_ASSOC);
$result = DB::table('user')->where('name',=,'Jhon')->get();

そうすれば、オブジェクトを作成してから配列に戻す時間を無駄にすることはありません。

14
alexw

そして別の解決策

$objectData = DB::table('user')
    ->select('column1', 'column2')
    ->where('name', '=', 'Jhon')
    ->get();
$arrayData = array_map(function($item) {
    return (array)$item; 
}, $objectData);

エンティティから複数の列のみが必要な場合に適しています。

4
mnv

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

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