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