Как получить набор результатов из необработанного запроса в виде массива вместо объекта в 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 ) ) 

Related of "Как получить набор результатов из необработанного запроса в виде массива вместо объекта в Laravel 3"

Оригинальный ответ для Laravel 3

У Eloquent есть метод to_array()

Из документов:

Метод to_array автоматически захватит все атрибуты вашей модели, а также любые загруженные отношения.

 $user = User::find($id); return Response::json($user->to_array()); 

или

 return Response::eloquent($user); 

Если вы свободно говорите, вы можете сделать так, как предложил Синан и изменить глобальную конфигурацию, чтобы вернуть ассоциативный массив, а не объекты.

Кроме того, вы можете конвертировать объект в 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()); 

Вы также можете получить весь результат всегда как массив, изменив

приложение / Config / database.php

 'fetch' => PDO::FETCH_CLASS, 

в строке 31 –

 'fetch' => PDO::FETCH_ASSOC, 

Я не знаю, имеет ли laravel встроенную функцию для возврата результатов в виде массива, но если вы не можете использовать этот фрагмент:

Где $data – ваш возвращенный массив объектов

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