Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用一对多关系在laravel中显示数据_Laravel - Fatal编程技术网

使用一对多关系在laravel中显示数据

使用一对多关系在laravel中显示数据,laravel,Laravel,我正在尝试使用laravel显示数据。我目前想在我的系统上显示对酒店的评论。在修改代码之前,我的帖子显示了,但是在下面的代码中,根本没有帖子显示,我很难理解为什么会发生这种情况 PostsController.php public function show($id) { $post = Post::find($id); $review = Post::find(1)->reviews()->where('title', 'posts_title')->get(

我正在尝试使用laravel显示数据。我目前想在我的系统上显示对酒店的评论。在修改代码之前,我的帖子显示了,但是在下面的代码中,根本没有帖子显示,我很难理解为什么会发生这种情况

PostsController.php

public function show($id)
{
    $post = Post::find($id);
    $review = Post::find(1)->reviews()->where('title', 'posts_title')->get();

    return view('posts.show', compact('post', 'review'));
}
public function reviews()
{
    return $this->hasMany('App\Review', 'title', 'post_title');
}
public function post()
{    
    return $this->belongsTo('App\Post');
}
Post.php

public function show($id)
{
    $post = Post::find($id);
    $review = Post::find(1)->reviews()->where('title', 'posts_title')->get();

    return view('posts.show', compact('post', 'review'));
}
public function reviews()
{
    return $this->hasMany('App\Review', 'title', 'post_title');
}
public function post()
{    
    return $this->belongsTo('App\Post');
}
Review.php

public function show($id)
{
    $post = Post::find($id);
    $review = Post::find(1)->reviews()->where('title', 'posts_title')->get();

    return view('posts.show', compact('post', 'review'));
}
public function reviews()
{
    return $this->hasMany('App\Review', 'title', 'post_title');
}
public function post()
{    
    return $this->belongsTo('App\Post');
}
变量
title
是评审的标题
post_title
是酒店的名称。两个标题都应该匹配(在我的系统中,它们是匹配的)。我知道你会用身份证,但我觉得在我的情况下这很难


我想显示与正确酒店相匹配的评论。请记住,以前所有my hotels都会显示,但是在更改代码后,它不会显示

您的查询中没有查看的原因如下:

$review = Post::find(1)->reviews()->where('title', 'posts_title')->get();
//                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
使用
where()
子句时,第一个参数是要查询的列名,第二个参数是要比较的实际值。。不是列名。因此,这将尝试查找每个标题值为“posts\u title”(字面意思)的评论。。。因此,返回了0条记录

现在,你还需要知道人际关系是如何运作的。如果在
Post
模型中定义关系,如下所示:

# Post.php

public function reviews()
{
    return $this->hasMany('App\Review', 'title', 'post_title');
}
这将按如下方式工作:它将获得所有包含
reviews.title
列的评论,该列等于
posts.post\u title

因此,如果此设置适用于您的dabatase,则无需重新声明此条件,只需执行查询并调用relationship方法即可:

# PostsController.php

$related_reviews = Post::find(1)->reviews;
还请注意,如果需要使用反向关系,还需要告诉laravel要使用的自定义PK/FK,以获得正确的结果

# Review.php

public function post()
{
    return $this->belongsTo('App\Post', 'title', 'post_title');
}


另外,如果您将酒店管理为数据库中的
POST
。。此模型和表的正确名称应分别为
Hotel
hotels

查询中没有
Review
s的原因如下:

$review = Post::find(1)->reviews()->where('title', 'posts_title')->get();
//                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
使用
where()
子句时,第一个参数是要查询的列名,第二个参数是要比较的实际值。。不是列名。因此,这将尝试查找每个标题值为“posts\u title”(字面意思)的评论。。。因此,返回了0条记录

现在,你还需要知道人际关系是如何运作的。如果在
Post
模型中定义关系,如下所示:

# Post.php

public function reviews()
{
    return $this->hasMany('App\Review', 'title', 'post_title');
}
这将按如下方式工作:它将获得所有包含
reviews.title
列的评论,该列等于
posts.post\u title

因此,如果此设置适用于您的dabatase,则无需重新声明此条件,只需执行查询并调用relationship方法即可:

# PostsController.php

$related_reviews = Post::find(1)->reviews;
还请注意,如果需要使用反向关系,还需要告诉laravel要使用的自定义PK/FK,以获得正确的结果

# Review.php

public function post()
{
    return $this->belongsTo('App\Post', 'title', 'post_title');
}


另外,如果您将酒店管理为数据库中的
POST
。。此模型和表的正确名称应分别为
Hotel
hotels

您能更好地解释postcontroller.php代码吗。我是否仍然保留:公共函数show($id){$post=post::find($id);//$review=review::all();$review=post::find(1)->reviews()->where('title','posts_title')->get();返回视图('posts.show',compact('post','review');)相同的代码,但包括新的部分。也不确定相关的_审查意味着什么。我是个新手laravel@cutesengh$related_reviews变量只获取与特定的
post
链接的
reviews
。你在评论中发布的代码不在你最初的问题中,所以我不知道你到底想用它实现什么。你想得到这个帖子和相关的评论吗?只需执行以下操作:
$post=post::find(1)->load('reviews')
确切地说,我希望获得该帖子的所有相关评论。我现在就试试看能得到什么,谢谢。我目前有帖子,但没有评论。我想获得该帖子的所有相关评论:未定义变量:查看我正在实现的代码是:公共函数show($id){$post=post::find($id);//$review=review::all();//$review=Post::find(1)->reviews;$Post=Post::find(1)->加载('reviews');返回视图('posts.show',compact('Post','review');您能更好地解释postcontroller.php代码吗?我是否仍然保留:公共函数show($id){$Post=Post::find($id);//$review=review::all();$review=Post::find(1)->reviews()->where('title','posts_title')->get();返回视图('posts.show',compact('Post','review');}同样的代码,但包括那篇新的文章。也不确定相关的评论意味着什么。我对这个很陌生laravel@cutesengh$related_reviews变量只是将
评论
链接到特定的
帖子
。您在评论中发布的代码不在您原来的问题中,因此我不知道您想表达什么我完全同意。你想获得帖子和相关评论吗?只需这样做:
$Post=Post::find(1)->load('reviews')
没错,我想获得该帖子的所有相关评论。我现在就试试看能得到什么,谢谢。我目前有该帖子,但没有评论。我想获得该帖子的所有相关评论。我收到错误:compact():Undefined var