我是Laravel的新手。我想显示所有帖子,包括发布帖子的用户。我有一个简单的查询,显示所有帖子,并使用帖子ID显示所选帖子。
public function view_post($id)
{
$post = User::find($id);
dd($post);
}
这工作得非常好,但我想要发布帖子的用户显示所有帖子。我怎样才能以正确的方式做到这一点?
答案 0 :(得分:5)
现在,首先获取Posts
然后使用该ID获取User
,就可以获得Posts
。注意:这不是使用Laravel与关系的推荐方法:
$user = User::find($id);
$posts = Post::where("user_id", "=", $user->id)->get();
虽然这样可行(假设你有一个带有Post
键的user_id
模型),但正确的方法是在模型中定义关系。对于这一个,hasMany()
和belongsTo()
User
和Post
尊重。这是您的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
样式的数据库查询的相当广泛的文档,请在此处查看:
希望有所帮助!
修改强>
要将其传递给视图,请将以下内容添加到控制器中:
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
Etc等。注意,我不知道您的users
和posts
表有哪些列,但使用$user->column
或$post->column
将回显该命名列的内容
以下是Views and Responses
的文档,可以帮助您解决此问题:
答案 1 :(得分:0)
您也可以简单地使用它。
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);
}
注意:不要忘记添加特征,也可以使用App \ Posts;