2012-10-07 247 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 */ 
}