如何用Laravel中的帖子查询用户


How to query user with posts in Laravel

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

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

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

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

$user = User::find($id);
$posts = Post::where("user_id", "=", $user->id)->get();

虽然这是可行的(假设您有一个带有user_id键的Post模型),但正确的方法是在模型中定义关系。对于这一个,它将分别是UserPost上的hasMany()belongsTo()。这是您的User.php型号类别:

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

确保在Post.php模型类中定义逆:

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

最后,您可以使用以下方法在控制器中查询此关系:

$user = User::find($id);
$posts = $user->posts()->get();

这也将通过强制任何更新/保存使用正确的user_id密钥来增强完整性。关于如何使用Eloquent风格的数据库查询,有一些相当丰富的文档,请在这里查看:

Laravel-Eloquent

希望能有所帮助!

编辑

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

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的文件,该文件"echos"有关用户和帖子的所有信息:

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

等等。注意,我不知道usersposts表有哪些列,但使用$user->column$post->column会回显该命名列的内容。

以下是Views and Responses的文档,它将帮助您解决这个问题:

Laravel-视图和响应

您也可以简单地使用它。

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;