将Laravel-4 Eloquent查询结果转换为数组

时间:2013-05-16 03:46:14

标签: laravel laravel-4 eloquent

我正在尝试让我的路由在数据库中插入一个新行,如果成功返回一些JSON中的记录(带有新的主键id)。我收到以下错误:

{
    "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 个答案:

答案 0 :(得分:9)

默认情况下,如果要直接返回Eloquent模型,它会将模型转换为它的JSON表示。这是因为每个模型上的__toString魔术方法使用toJson方法将模型作为JSON返回。

因此,该模型同时实现了ArrayableInterfaceJsonableInterface。这意味着您可以直接在模型上调用toJsontoArray

现在您可以将列标记为隐藏。这意味着当模型转换为数组或JSON表示时,会删除一些列(想想可公开访问的API,您不希望密码显示!)。我不完全确定,但可能隐藏了你的模型的ID。

在一天结束时,您需要做的就是返回实例。

return $client;

它会自动转换为JSON。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

我看到类似的问题,你试图将数据返回到jquery jtable和我一样

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

尝试多个小时我从对象找到解决方案getcollection pull实例然后解决