2012-10-07 246 views
8

時,取從雄辯的型號所有行:Laravel雄辯/流利

$pin = Pin::all(); 

我得到一個數組,看起來像:

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

,當我用流利的代替:

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

我得到一個普通的數組沒有「屬性」,「有緣」,「realtionships」 ..索引。

我該如何使用Eloquent,使它像FLuent一樣返回一個普通數組呢?

+0

你不能。 Eloquent的要點是要返回一堆對象,您可以使用特定於這些模型的域的特定方法來處理這些對象。 – Franz

+0

我明白了,所以在這種情況下,您是否知道從數組中獲取數據的快速方法,以便我可以對其進行編碼json(試圖將其發送到Backbone集合)?謝謝 – silkAdmin

+0

@silkAdmin請參閱下面的修改答案。您可以使用Pin :: all() - > toArray() – Raftalks

回答

11

它非常簡單。

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

,或者如果你想送出去JSON對象,嘗試使用

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

,或者如果你有一個數組轉換爲JSON輸出比使用

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

不可以不一樣 – silkAdmin

+0

@silkAdmim Franz在他的評論中指出,資源將在那裏。你可以做一個foreach循環,並使用to_array()方法得到一個數組。 – Raftalks

+0

好的,謝謝你的輸入Raf,我會玩這個。 – silkAdmin

1

Laravel有建在to_array()功能,所以你可以做這樣的事情。

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

希望幫助:d

+0

謝謝to_array方法不可用,因爲數組從all()和get()返回而不是對象。 – silkAdmin

+0

@silkAdmin是的,但它是一個模型(對象)數組,您需要通過數組做一個foreach循環來獲取每個對象,然後在單個對象上調用to_array()方法。 – Raftalks

3

隨着Laravel 4,你可以這樣做:

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

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

將在JSON格式返回數據

+0

謝謝,很高興知道 – silkAdmin

0

OR

$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 */ 
}