2012-10-07 17 views
8

Al recuperar todas las filas de un modelo elocuente:laravel Elocuente/fluidez

$pin = Pin::all(); 

consigo una matriz que se parece a:

array(2) { 
    [0]=> 
    object(Pin)#36 (5) { 
    ["attributes"]=> 
    array(9) { 
     ["id"]=> 
     string(1) "2" 
     ["creator"]=> 
     string(1) "1" 
    ["original"]=> 
    array(9) { 
     ["id"]=> 
     string(1) "2" 
     ["creator"]=> 
     string(1) "1" 
    } 
    ["relationships"]=> 
    array(0) { 
    } 
    ["exists"]=> 
    bool(true) 
    ["includes"]=> 
    array(0) { 
    } 
    } 
} 

Como cuando uso Fluido lugar:

$pin = DB::table('pins')->get(); 

obtengo como una matriz simple sin el "Atributo", "Orginial", "realtionships" .. índices

¿Cómo puedo usar Eloquent para que devuelva una matriz simple como FLuent?

+0

No puedes. El objetivo de Eloquent es que se devuelvan un conjunto de objetos sobre los que puede actuar con determinados métodos que son específicos del dominio para estos modelos. – Franz

+0

Veo, entonces en ese caso ¿conoce usted una manera rápida de obtener los datos de esta matriz para poder codificarla json (intentando enviar eso a la colección Backbone)? Gracias – silkAdmin

+0

@silkAdmin por favor vea la respuesta modificada a continuación. Use The Eloquent Response para dar una buena carga útil JSON para trabajar con frameworks como Backbone, Angularjs, etc. – Raftalks

Respuesta

11

Es muy simple.

$pins = Pin::get(); 
foreach($pins as $p){ 
$pin[] = $p->to_array(); 
} 

o si desea enviar objeto JSON, trate de usar

$pins = Pin::all(); 
return Response::eloquent($pins); 

o si tiene una matriz que ser convertido a la salida JSON que utilizar

return Response::json(array('name' => 'Batman')); 
+0

Nope Get hace lo mismo – silkAdmin

+0

@silkAdmim Como Franz ha señalado en su comentario, los recursos estarán allí. Puedes hacer un ciclo foreach y obtener una matriz usando el método to_array() – Raftalks

+0

Ok gracias por la entrada de Raf, voy a jugar con eso. – silkAdmin

1

laravel tiene una construido en la función to_array() para que pueda hacer algo como esto.

$pins = Pin::all(); 
foreach($pins as $pin) { 
    $pin_array = $pin->to_array(); 
    /* Do something with pin array here */ 
} 

Espero que ayude: D

+0

Gracias aunque el método to_array no está disponible ya que una matriz se devuelve desde all() y get() y no es un objeto. – silkAdmin

+0

@silkAdmin Sí, pero es una Matriz de Modelos (Objetos) y necesita hacer un ciclo foreach a través de la matriz para buscar cada objeto y luego llamar al método to_array() en el único objeto. – Raftalks

3

Con laravel 4 sólo se puede hacer:

//get all pins from db 
public function index(){ 
    return Pin::all(); 
} 

//get specific pin from db 
public function show($id){ 
    return Pin::find($id); 
} 

que devolverá sus datos en formato JSON

+0

Gracias, es bueno saber – silkAdmin

0

O

$model->original; 
// but still do a foreach loop. 
// Like so 

$pins = Pin::all(); 
foreach($pins as $pin) { 
    $pin_array = $pin->original; 
    /* Do something with pin array here */ 
}