php - vacio - Cómo recuperar un conjunto de resultados de una consulta cruda como una matriz en lugar de un objeto en Laravel 3
obtener el indice de un array php (3)
De forma predeterminada, los métodos de consulta sin formato de Laravel arrojan resultados como matrices de objetos 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
)
)
La pregunta es cómo hacer que Laravel devuelva una matriz de matrices en su lugar:
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
)
)
Respuesta original para Laravel 3
Eloquent tiene un método to_array()
De documentos:
El método to_array automáticamente tomará todos los atributos en su modelo, así como también cualquier relación cargada.
$user = User::find($id);
return Response::json($user->to_array());
o
return Response::eloquent($user);
Si está utilizando con fluidez, puede hacer lo que sugiere Sinan y cambiar la configuración global para devolver una matriz asociativa en lugar de objetos.
Alternativamente, puede convertir un objeto ay desde JSON para convertirlo a una matriz, aunque la opción global sería preferible en la mayoría de los casos. Puede usar lo siguiente en proyectos donde prefiere objetos normalmente pero en ciertos casos extremos necesita una matriz. Este método no funcionará bien con Eloquent; utilice los métodos anteriores en ese caso.
$users = DB::table(''users'')->where(''name'', ''='', ''david'')->get();
return array_map(function($val)
{
return json_decode(json_encode($val), true)
}, $users);
Otra opción sería cambiar temporalmente la configuración de tiempo de ejecución
Config::set(''database.fetch'', PDO::FETCH_ASSOC);
Para Laravel ~ 4
En Laravel 4 en adelante, todos los nombres de los métodos cumplen con los estándares 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());
No sé si laravel tiene una función integrada para devolver resultados como una matriz, pero si no puede utilizar este fragmento:
Donde $data
es la matriz devuelta de objetos
$data = json_decode(json_encode((array) $data), true);
También puede obtener todos los resultados siempre como una matriz cambiando
application / config / database.php
''fetch'' => PDO::FETCH_CLASS,
en la línea 31 a
''fetch'' => PDO::FETCH_ASSOC,