我正在使用Laravel和AngularJS开发一个应用程序。
我的问题是我想从某个用户的表中获取所有信息。
在routes.php文件中,我已经宣布了一个小组,以便我可以通过以下方式查看所有评论:
localhost/project/public/api/comments.
我还希望能够通过以下方式获取给定用户的所有评论:
localhost/project/public/api/comment/id.
Route::group(array('prefix' => 'api'), function() {
Route::resource('comments', 'CommentController', array('only' => array('index', 'store', 'destroy')));
Route::get('comment/{id}', function($id) {
$col = 'user_id';
return Comments::where($col, '=', $id);
});
}
使用此代码时,我收到错误消息:
ErrorException Object of class Illuminate\Database\Eloquent\Builder could not be converted to string
我可以通过添加以下内容获得第一个结果:
return Comment::where($col, '=', $id)->first();
但我希望收到给定用户的所有评论。怎么办呢。
答案 0 :(得分:3)
你需要得到一个结果
return Comments::where($col, '=', $id)->get();
但是你应该将它序列化为JSON格式(例如),所以你应该这样做:
$comments = Comments::where($col, '=', $id)->get();
return Response::json(array('success'=>true,'comments'=>$comments->toJson()));
答案 1 :(得分:1)
路由器要求您返回一个Response
对象,而不是Collection,Builder或其他任何东西 - 因为Laravel尝试将响应转换为字符串(就像它发生在视图中),但是响应有一个_toString()方法,其他对象可能不会 - 因此你的错误。
您应该返回一个视图或其他响应(如JSON),可能会执行以下操作:
Route::get('comment/{id}', function($id) {
$comments = Comments::where('user_id', '=', $id)->get();
return View::make('myview')->with('comments', $comments);
});