我正在尝试让我的路由在数据库中插入一个新行,如果成功返回一些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
如果成功插入则返回模型的实例。我已经检查了数据库,并且正在插入记录。
答案 0 :(得分:9)
默认情况下,如果要直接返回Eloquent模型,它会将模型转换为它的JSON表示。这是因为每个模型上的__toString
魔术方法使用toJson
方法将模型作为JSON返回。
因此,该模型同时实现了ArrayableInterface
和JsonableInterface
。这意味着您可以直接在模型上调用toJson
或toArray
。
现在您可以将列标记为隐藏。这意味着当模型转换为数组或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实例然后解决