Как получить результирующий набор из необработанного запроса в виде массива вместо объекта в Laravel 3
по умолчанию методы необработанных запросов 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
)
)
3 ответов
оригинальный ответ для Laravel 3
красноречивый имеет способ to_array()
из docs:
метод to_array автоматически захватит все атрибуты на ваша модель, а также любые загруженные отношения.
$user = User::find($id);
return Response::json($user->to_array());
или
return Response::eloquent($user);
если вы используете fluent, вы можете сделать, как предложил Синан, и изменить глобальную конфигурацию, чтобы вернуть ассоциативный массив, а не объекты.
кроме того, вы можете преобразовать объект в и из JSON, чтобы преобразовать его в массив, хотя глобальный вариант был бы предпочтительнее в большинстве случаев. Вы можете использовать следующее в проектах, где обычно предпочитаете объекты, но в некоторых случаях ребра нуждаются в массиве. Этот метод не будет хорошо играть с красноречивым, используйте методы выше в этом случае.
$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());
вы также можете получить весь результат всегда как массив путем изменения
application / config / database.в PHP
'fetch' => PDO::FETCH_CLASS,
на линии 31 к
'fetch' => PDO::FETCH_ASSOC,
Я не знаю, имеет ли laravel встроенную функцию для возврата результатов в виде массива, но если нет, вы можете использовать этот фрагмент:
здесь $data
ваш возвращенный массив объектов
$data = json_decode(json_encode((array) $data), true);