使用Laravel和AngularJS从数据库中获取用户特定信息

时间:2014-05-23 09:33:19

标签: php database angularjs laravel

我正在使用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();

但我希望收到给定用户的所有评论。怎么办呢。

2 个答案:

答案 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);
});