4

我试图让我的路线在数据库中插入一个新行,如果成功返回一些 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在成功插入时返回模型的实例。我检查了数据库,记录插入得很好。

4

3 回答 3

9

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

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

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

归根结底,您需要做的就是返回实例。

return $client;

它将自动为您转换为 JSON。

于 2013-05-16T05:47:16.953 回答
3

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

于 2014-08-19T02:20:52.400 回答
1

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

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

尝试了很多小时,我找到了解决方案 getcollection 从对象中提取实例,然后解决

于 2013-09-01T08:50:18.340 回答