2012-10-07 25 views
8

Quando il recupero di tutte le righe da un modello Eloquente:laravel Eloquente/fluente

$pin = Pin::all(); 

ricevo una matrice che assomiglia:

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) { 
    } 
    } 
} 

Come quando uso perfetto invece:

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

Ottengo come una matrice semplice senza l'"Attributo", "Originale", "realtionships" .. indici.

Come è possibile utilizzare Eloquent in modo che restituisca un array normale come fa FLUENT?

+0

Non puoi. L'intero punto di Eloquent è di avere un sacco di oggetti restituiti su cui si può agire con determinati metodi che sono specifici del dominio per questi modelli. – Franz

+0

Vedo, quindi in questo caso sei a conoscenza di un modo rapido per estrarre i dati da questo array in modo che io possa codificarlo json (Sto cercando di inviarlo alla raccolta Backbone)? Grazie – silkAdmin

+0

@silkAdmin si prega di consultare la risposta modificata di seguito. Utilizzare The Eloquent Response per fornire un buon payload JSON per lavorare con framework come Backbone, Angularjs, ecc. – Raftalks

risposta

11

È molto semplice.

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

o se si desidera inviare oggetto JSON, provare a utilizzare

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

o se si dispone di un array per essere convertito in uscita JSON che utilizzare

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

Nope Get fa lo stesso – silkAdmin

+0

@silkAdmim Come Franz ha sottolineato nel suo commento, le risorse saranno lì. Puoi fare un ciclo foreach e ottenere un array usando il metodo to_array() – Raftalks

+0

Ok grazie per l'input Raf, giocherò con quello. – silkAdmin

1

laravel ha un costruito nella funzione to_array() in modo da poter fare qualcosa di simile.

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

Speranza che aiuta: D

+0

Grazie al metodo to_array non è disponibile in quanto un array viene restituito da all() e get() e non da un oggetto. – silkAdmin

+0

@silkAdmin Sì, ma è una matrice di modelli (oggetti) ed è necessario eseguire un ciclo foreach attraverso la matrice per recuperare ogni oggetto e quindi chiamare il metodo to_array() sul singolo oggetto. – Raftalks

3

Con laravel 4 si può solo fare:

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

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

che restituirà i dati in formato JSON

+0

Grazie, buono a sapersi – 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 */ 
}