2013-05-16 93 views
4

我試圖讓我的路由將新行插入到數據庫中,並且如果成功返回某個JSON中的記錄(使用其新的主鍵ID)。我收到以下錯誤:將Laravel-4雄辯的查詢結果轉換爲數組

{ 
    "error": 
    { 
     "type":"BadMethodCallException", 
     "message":"Call to undefined method Illuminate\\Database\\Query\\Builder::to_array()", 
     "file":"\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Query\\Builder.php", 
     "line":1418 
    } 

} 

這是我的路線:

Route::post('/client/create', function() 
{ 
    $client = Client::create(Input::all()); 
    if($client) 
    { 
     return json_encode(array('Result' => 'OK', 'Record' => $client->to_array())); 
    } 
    else 
    { 
     return json_encode(array('Result' => 'ERROR', 'Message' => 'Error Inserting Record =(')); 
    } 
}); 

按照Laravel文檔我讀過,你應該使用->to_array()到模型轉換成數組和::create返回模型的一個實例,如果成功插入。我檢查了數據庫,並且記錄正在插入。

+3

嘗試'''返回$ client-> toArray();'''並且您也可以使用'''return $ client-> toJson();'''if這就是你需要的。 –

+0

@AntonioCarlosRibeiro謝謝,這是有效的!它沒有傳入插入行的id,但我總是可以在其他地方找到它。 –

回答

9

默認情況下,如果您要直接返回Eloquent模型,它會將模型轉換爲其JSON表示。這是因爲每個模型上的__toString魔法方法使用toJson方法將模型作爲JSON返回。

因此,該模型實現了ArrayableInterfaceJsonableInterface。這意味着您可以直接在模型上撥打toJsontoArray

現在您可以將列標記爲隱藏。這意味着當模型轉換爲數組或JSON表示時,某些列被刪除(認爲可公開訪問的API,您不需要顯示密碼!)。我不完全確定,但可能您的模型ID已被隱藏。

在一天結束時,您需要做的就是返回實例。

return $client; 

它會自動轉換爲JSON。

+0

謝謝!似乎我錯誤地使用了Laravel 3文檔。 id問題原來是由一些數據庫觸發器引起的,一旦我刪除它們,我也得到了id。 –

+0

謝謝!我確定,它必須存在,因爲Laravel是偉大的! –

1

我看到類似的問題,您嘗試將數據返回的jQuery的JTable和同我

Player::orderBy($sort)->paginate($pagesize)->getCollection(); 
return Response::view(array('Result'=>'OK','Records'=>$player->toArray())); 

爲儘量多小時,我發現解決方案getcollection從對象拉實例,然後解決

3

to_array()方法來自Laravel 3.在Laravel 4中使用toArray()