【问题标题】:How to query user with posts in Laravel如何在 Laravel 中使用帖子查询用户
【发布时间】:2020-04-16 21:48:15
【问题描述】:

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

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

        dd($post);

    }

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

【问题讨论】:

标签: php laravel


【解决方案1】:

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

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

虽然这可行(假设您有一个带有user_id 键的Post 模型),但正确的方法是在模型中定义关系。对于这个,它将是 hasMany()belongsTo() UserPost 恭敬地。这是您的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 的文件,该文件“回显”有关用户和帖子的所有信息:

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

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

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

Laravel - Views and Responses

【讨论】:

  • $posts = $user->posts()->get() 这行会得到一个用户的所有帖子,对吧?如果我只想与发布它的用户一起显示一个帖子呢?
  • 您将$user$posts 都传递给视图并在那里处理它们。我会快速编辑一下。
  • 现在,如果您想显示他们用户的所有帖子,请执行Post::get(),循环查看每个$posts AS $post 并致电$post-&gt;user()-&gt;first 以获取他们的信息,例如姓名和电子邮件。跨度>
  • 没关系,我明白了。只是方法有点模糊。但现在它更清楚了,谢谢。我会试试你的代码。
  • @TimLewis 您将@seanacre 指向完全错误的方向。他想获得帖子的用户:所以$post = $post-&gt;with('user')-&gt;find(1); $user = $post-&gt;user; 会这样做。
【解决方案2】:

你也可以简单地使用这个。

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-28
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2022-01-28
    • 2019-04-01
    • 2017-03-29
    相关资源
    最近更新 更多