Php 如何在Laravel中查询具有帖子的用户

Php 如何在Laravel中查询具有帖子的用户,php,laravel,Php,Laravel,我是拉威尔的新手。我想显示所有帖子,包括发布帖子的用户。我有一个简单的查询,它显示所有帖子,并使用帖子id显示所选帖子 public function view_post($id) { $post = User::find($id); dd($post); } 这是非常好的工作,但我想显示所有张贴的用户张贴的帖子。我怎样才能以正确的方式做到这一点 现在,可以通过首先获取用户然后使用该ID获取帖子来获取帖子。注意:这不是使用关系的Laravel

我是拉威尔的新手。我想显示所有帖子,包括发布帖子的用户。我有一个简单的查询,它显示所有帖子,并使用帖子id显示所选帖子

public function view_post($id)
    {
        $post = User::find($id);

        dd($post);

    }

这是非常好的工作,但我想显示所有张贴的用户张贴的帖子。我怎样才能以正确的方式做到这一点

现在,可以通过首先获取
用户
然后使用该ID获取
帖子
来获取
帖子
。注意:这不是使用关系的Laravel的推荐方法:

$user = User::find($id);
$posts = Post::where("user_id", "=", $user->id)->get();
虽然这是可行的(假设您有一个带有
user\u id
键的
Post
模型),但正确的方法是在模型中定义关系。对于这一个,它将是
hasMany()
belongsTo()
on
User
Post
。这是您的
User.php
模型类:

class User extends Eloquent {
  protected $table = "users";

  public function posts(){
    return $this->hasMany("Post");
  }
}
class Post extends Eloquent {
  protected $table = "posts";

  public function user(){
    return $this->belongsTo("User");
  }
}
并确保在
Post.php
model类中定义反向:

class User extends Eloquent {
  protected $table = "users";

  public function posts(){
    return $this->hasMany("Post");
  }
}
class Post extends Eloquent {
  protected $table = "posts";

  public function user(){
    return $this->belongsTo("User");
  }
}
最后,您可以使用以下命令在控制器中查询此关系:

$user = User::find($id);
$posts = $user->posts()->get();
这还将强制所有更新/保存使用正确的
user\u id
键,从而加强完整性。关于如何使用
雄辩的
风格的数据库查询,这里有一些非常广泛的文档,请查看:

希望有帮助

编辑

要将其传递到视图,请将以下内容添加到控制器:

public function view_post($id){
    $user = User::find($id);
    $posts = $user->posts()->get();

    return View::make("view")->with(array("user" => $user, "posts" => $posts));
}
您需要在
app/views
目录中创建一个名为
view.blade.php
的文件,该文件“回显”有关用户和帖子的所有信息:

<h2>User: {{ $user->id }} - {{ $user->email }}</h2>
<br/>
<h2>Posts:</h2>
@foreach($posts AS $post)
<p> {{ $post->id }}: {{ $post->content }}</p>
@endforeach
User:{{{$User->id}}-{{$User->email}

帖子: @foreach($posts作为$post) {{$post->id}:{{$post->content}

@endforeach
等等。注意,我不知道您的
users
posts
表有哪些列,但是使用
$user->column
$post->column
将回显指定列的内容

以下是有关
视图和响应的文档
,它将帮助您解决此问题:


您也可以简单地使用它

public function($id){
$posts = Posts::where('uid','=',auth()->user()->id)->findOrFail($id);
return view('your_blade.php',compact('posts'));

OR either you can return this

return response()->json([$posts], 200);


}

注意:不要忘记添加trait,也可以使用App\Posts

你对laravel雄辩模型有什么想法?你定义了模型之间的关系吗?这一点在官方的Laravel文档中得到了明确的解释:在提出简单的问题之前先阅读这本书会对你有好处。阅读Dayle Reese的书!这对初学者来说非常好$posts=$user->posts()->get()这一行将获得用户的所有帖子,对吗?如果我只想与发布帖子的用户一起显示帖子,怎么样?您可以将
$user
$posts
传递到一个视图并在那里处理它们。我将进行快速编辑。现在,如果您想显示所有帖子及其用户,请执行
Post::get()
,将每个
$Post循环为$Post
,然后首先调用
$Post->user()->以获取他们的信息,如姓名和电子邮件。我明白了。只是方法有点模糊。但现在更清楚了,谢谢。我会试试你的代码。@TimLewis你把@seanacre指向了完全错误的方向。他想获得一个帖子的用户:所以
$post=$post->with('user')->find(1)$用户=$post->user就可以了。