31

デフォルトでは、Laravelの生のクエリメソッドは結果をstdClassオブジェクトの配列として返します。

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [username] => admin
            [password] => admin123
            [email] => admin@admin.com
            [created_at] => 2012-12-06 18:57:19
            [updated_at] => 2012-12-06 00:00:00
        )

    [1] => stdClass Object
        (
            [id] => 2
            [username] => userna
            [password] => user
            [email] => user@gmail.com
            [created_at] => 2012-12-06 00:00:00
            [updated_at] => 2012-12-05 00:00:00
        )
)

問題は、Laravelが代わりに配列の配列を返すようにする方法です。

   Array
    (
        [0] => Array
            (
                [id] => 1
                [username] => admin
                [password] => admin123
                [email] => admin@admin.com
                [created_at] => 2012-12-06 18:57:19
                [updated_at] => 2012-12-06 00:00:00
            )

        [1] => Array
            (
                [id] => 2
                [username] => userna
                [password] => user
                [email] => user@gmail.com
                [created_at] => 2012-12-06 00:00:00
                [updated_at] => 2012-12-05 00:00:00
            )
    )
4

3 に答える 3

36

変更することで、すべての結果を常に配列として取得することもできます

application / config / database.php

'fetch' => PDO::FETCH_CLASS,

31行目から

'fetch' => PDO::FETCH_ASSOC,
于 2012-12-06T16:01:32.417 に答える
21

Laravel3の元の回答

Eloquentには方法がありますto_array()

ドキュメントから:

to_arrayメソッドは、モデルのすべての属性と、ロードされた関係を自動的に取得します。

$user = User::find($id);

return Response::json($user->to_array());

また

return Response::eloquent($user);

流暢なものを使用している場合は、Sinanが提案したように実行し、グローバル構成を変更して、オブジェクトではなく連想配列を返すことができます。

または、オブジェクトをJSONとの間で変換して配列に変換することもできますが、ほとんどの場合、グローバルオプションの方が適しています。通常はオブジェクトを優先するが、特定のエッジケースでは配列が必要なプロジェクトでは、以下を使用できます。この方法はEloquentではうまく機能しません。その場合は上記の方法を使用してください。

$users = DB::table('users')->where('name', '=', 'david')->get();

return array_map(function($val)
{
    return json_decode(json_encode($val), true)
}, $users);

別のオプションは、ランタイム構成を一時的に変更することです

Config::set('database.fetch', PDO::FETCH_ASSOC);

Laravelの場合〜4

Laravel 4以降では、すべてのメソッド名がPSR-2標準に準拠しています。

$user = User::findOrFail($id);

return Response::json($user->toArray());

// In Laravel 5 onward the functions are preferred to facades.
return response()->json($user->toArray());
于 2012-12-06T15:10:09.447 に答える
11

laravelに結果を配列として返すための組み込み関数があるかどうかはわかりませんが、そうでない場合は、次のスニペットを使用できます。

$data返されたオブジェクトの配列はどこにありますか

$data = json_decode(json_encode((array) $data), true);
于 2012-12-06T15:01:40.323 に答える