По умолчанию исходные методы запроса 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 ) )
У 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 все названия методов соответствуют стандартам 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);