デフォルトでは、Laravelの生のクエリメソッドは、結果をstdClassオブジェクトの配列として返します。
Array
(
[0] => stdClass Object
(
[id] => 1
[username] => admin
[password] => admin123
[email] => [email protected]
[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] => [email protected]
[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] => [email protected]
[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] => [email protected]
[created_at] => 2012-12-06 00:00:00
[updated_at] => 2012-12-05 00:00:00
)
)
Eloquentにはto_array()
メソッドがあります
ドキュメントから:
To_arrayメソッドは、モデル上のすべての属性とロードされた関係を自動的に取得します。
$user = User::find($id);
return Response::json($user->to_array());
または
return Response::eloquent($user);
Fluentを使用している場合は、Sinanが提案したとおりに実行し、オブジェクトではなく連想配列を返すようにグローバル構成を変更できます。
または、オブジェクトをJSONに変換したり、JSONからオブジェクトを変換して配列に変換することもできますが、ほとんどの場合、グローバルオプションが望ましいでしょう。通常はオブジェクトを好むプロジェクトで次を使用できますが、特定のEdgeの場合には配列が必要です。この方法は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以降では、すべてのメソッド名は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());
また、変更することにより、常にすべての結果を配列として取得することもできます
application/config/database.php
'fetch' => PDO::FETCH_CLASS,
行31に
'fetch' => PDO::FETCH_ASSOC,
laravel=が結果を配列として返すための組み込み関数を持っているかどうかはわかりませんが、そうでない場合は、このスニペットを使用できます。
どこ$data
は返されたオブジェクトの配列です
$data = json_decode(json_encode((array) $data), true);