Laravel-如何通过Laravel API访问关系

时间:2019-03-25 09:57:22

标签: php laravel vue.js

我有一个Laravel和Vue.js应用程序,我正在通过API将评论发送到帖子页面。现在,我想通过该API获得针对该帖子的评论,这是我尝试过的:

commentController

public function index(){
    $comment = Comment::with('post')->get();
    return new CommentResource($comment);
}

评论模型

public function post(){
    return $this->belongsTo(Post::class);
}

postmodel

  public function comments(){
    return $this->hasMany(Comment::class);
}

这是我的Api路线

Route::resource('comment','CommentController');

最后是我击中

时得到的
http://localhost:8000/api/comment

是所有评论,而不是属于特定帖子的评论

{
    "data": [{
        "id": 33,
        "body": "a",
        "user_id": 1,
        "user_email": "a",
        "user_name": "a",
        "status": 0,
        "post_id": 9,
        "created_at": "2019-03-25 08:50:55",
        "updated_at": "2019-03-25 08:50:55",
        "post": null
    }, {
        "id": 32,
        "body": "a",
        "user_id": 1,
        "user_email": "a",
        "user_name": "a",
        "status": 0,
        "post_id": 9,
        "created_at": "2019-03-25 08:50:55",
        "updated_at": "2019-03-25 08:50:55",
        "post": null
    }, {
        "id": 31,
        "body": "a",
        "user_id": 1,
        "user_email": "a",
        "user_name": "a",
        "status": 0,
        "post_id": 9,
        "created_at": "2019-03-25 08:50:55",
        "updated_at": "2019-03-25 08:50:55",
        "post": null
    }, {
        "id": 30,
        "body": "a",
        "user_id": 1,
        "user_email": "a",
        "user_name": "a",
        "status": 0,
        "post_id": 1,
        "created_at": "2019-03-25 08:50:55",
        "updated_at": "2019-03-25 08:50:55",
        "post": null
    }]
}

有什么想法只将相关评论发送到特定帖子吗?

4 个答案:

答案 0 :(得分:1)

您的人际关系似乎是正确的,应该能够将json结构的所有评论嵌套在一起,例如

<%@ page import="java.sql.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>

<%@ page import="java.util.Locale" %>
<%@include file="../../../WEB-INF/jspf/mcre.jspf" %>
<%@include file="../../../WEB-INF/jspf/session.jspf"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>


</head>
<body>

<%
    long fileID = Long.parseLong(request.getParameter("id"));
    String uniquecode=request.getParameter("uniquecode");
    String startdt=request.getParameter("startdate");
    String enddate=request.getParameter("enddate");







    int enablestatus= Integer.parseInt(request.getParameter("enable"));

    fileFacade.insert_update(fileID,uniquecode,startdt,enddate,enablestatus);



%>

</body>
</html>

也许您应该检查数据库表结构和外键

答案 1 :(得分:1)

尝试以下代码,

我将您的控制器index()功能更改为

use NorAm\UserManagement\Http\Requests\Request;

class myController{

   public function index(Request $request){
      $postId = $request->postId; // this should pass through you API. 
      $comment = Comment::with('post')->where('post_id',$postId)->get(); 
      return new CommentResource($comment);
   }

}

答案 2 :(得分:1)

在CommentResource.php中,您应该在可用时返回关系

return [
...
'post' => new PostResource($this->whenLoaded('post')),
...
];

答案 3 :(得分:1)

假设您的评论表中有post_id。因此,要获取与特定帖子相关的评论,您需要将post_id(需要评论的帖子)传递到您的位置。 因此查询将是: Comment::with('post)->where('post_id',$postId)->get(); 用于获取相关帖子的评论。

邮政模型的另一种方式:-

如果您要获取帖子,并且需要与帖子相关的评论(您的要求)。 然后 在模型中,使用

更改评论方法

public function comments(){ return $this->belongsToMany(Comment::class); } Post::with(comments)->get()

与此同时,您可以获取帖子以及评论