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

DNM*_*DNM 1 php laravel

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

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

        dd($post);

    }
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*wis 7

现在,有可能Posts首先获得User当时使用该ID,获得Posts.注意:这不是使用Laravel与关系的推荐方法:

$user = User::find($id);
$posts = Post::where("user_id", "=", $user->id)->get();
Run Code Online (Sandbox Code Playgroud)

虽然这可行(假设你有一个Postuser_id键的模型),但正确的方法是在模型中定义关系.对于这一个,这将是hasMany()belongsTo()UserPost尊敬.这是你的User.php模型类:

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

  public function posts(){
    return $this->hasMany("Post");
  }
}
Run Code Online (Sandbox Code Playgroud)

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

class Post extends Eloquent {
  protected $table = "posts";

  public function user(){
    return $this->belongsTo("User");
  }
}
Run Code Online (Sandbox Code Playgroud)

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

$user = User::find($id);
$posts = $user->posts()->get();
Run Code Online (Sandbox Code Playgroud)

这还将通过强制任何更新/保存来使用正确的user_id密钥来强制完整性.有关如何使用Eloquent数据库查询样式的大量文档,请在此处查看:

Laravel - 雄辩

希望有所帮助!

编辑

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

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

    return View::make("view")->with(array("user" => $user, "posts" => $posts));
}
Run Code Online (Sandbox Code Playgroud)

您将需要一个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
Run Code Online (Sandbox Code Playgroud)

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

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

Laravel - 观点和回应